{-# LANGUAGE FlexibleContexts, TemplateHaskell, UndecidableInstances, PackageImports, TypeFamilies, RankNTypes #-}
module Text.Papillon.Parser (
	Peg,
	Definition(..),
	Selection(..),
	getSelectionType,
	ExpressionHs(..),
	NameLeaf(..),
	NameLeaf_(..),
	ReadFrom(..),
	parse,
	showNameLeaf,
	nameFromRF,
	ParseError(..),
	mkParseError,
	Derivs(peg, pegFile, char),
	Pos(..),
	ListPos(..),
	pePositionS,
	Source(..),
	SourceList(..),

	PPragma(..),
	ModuleName,
	ExportList,
	Code
) where

import Text.Papillon.Papillon
import Control.Applicative
import "monads-tf" Control.Monad.State
import "monads-tf" Control.Monad.Error



import Data.Char
import Language.Haskell.TH
import Text.Papillon.SyntaxTree

data Derivs
    = Derivs {pegFile :: (Either (ParseError (Pos String) Derivs)
                                 ((PegFile, Derivs))),
              pragmas :: (Either (ParseError (Pos String) Derivs)
                                 (([PPragma], Derivs))),
              pragma :: (Either (ParseError (Pos String) Derivs)
                                ((PPragma, Derivs))),
              pragmaStr :: (Either (ParseError (Pos String) Derivs)
                                   ((String, Derivs))),
              pragmaItems :: (Either (ParseError (Pos String) Derivs)
                                     (([String], Derivs))),
              pragmaEnd :: (Either (ParseError (Pos String) Derivs)
                                   (((), Derivs))),
              moduleDec :: (Either (ParseError (Pos String) Derivs)
                                   ((Maybe (([String], Maybe String)), Derivs))),
              moduleName :: (Either (ParseError (Pos String) Derivs)
                                    ((ModuleName, Derivs))),
              moduleDecStr :: (Either (ParseError (Pos String) Derivs)
                                      ((String, Derivs))),
              whr :: (Either (ParseError (Pos String) Derivs) (((), Derivs))),
              preImpPap :: (Either (ParseError (Pos String) Derivs)
                                   ((String, Derivs))),
              prePeg :: (Either (ParseError (Pos String) Derivs)
                                ((String, Derivs))),
              afterPeg :: (Either (ParseError (Pos String) Derivs)
                                  ((String, Derivs))),
              importPapillon :: (Either (ParseError (Pos String) Derivs)
                                        (((), Derivs))),
              varToken :: (Either (ParseError (Pos String) Derivs)
                                  ((String, Derivs))),
              typToken :: (Either (ParseError (Pos String) Derivs)
                                  ((String, Derivs))),
              pap :: (Either (ParseError (Pos String) Derivs) (((), Derivs))),
              peg :: (Either (ParseError (Pos String) Derivs) ((TTPeg, Derivs))),
              sourceType :: (Either (ParseError (Pos String) Derivs)
                                    ((String, Derivs))),
              peg_ :: (Either (ParseError (Pos String) Derivs) ((Peg, Derivs))),
              definition :: (Either (ParseError (Pos String) Derivs)
                                    ((Definition, Derivs))),
              selection :: (Either (ParseError (Pos String) Derivs)
                                   ((Selection, Derivs))),
              normalSelection :: (Either (ParseError (Pos String) Derivs)
                                         ((Selection, Derivs))),
              plainSelection :: (Either (ParseError (Pos String) Derivs)
                                        ((Selection, Derivs))),
              expressionHs :: (Either (ParseError (Pos String) Derivs)
                                      ((ExpressionHs, Derivs))),
              expressionHsSugar :: (Either (ParseError (Pos String) Derivs)
                                           ((ExpressionHs, Derivs))),
              plainExpressionHs :: (Either (ParseError (Pos String) Derivs)
                                           ((ExpressionHs, Derivs))),
              plainReadFromLs :: (Either (ParseError (Pos String) Derivs)
                                         ((ReadFrom, Derivs))),
              expression :: (Either (ParseError (Pos String) Derivs)
                                    ((Expression, Derivs))),
              nameLeaf_ :: (Either (ParseError (Pos String) Derivs)
                                   ((NameLeaf_, Derivs))),
              nameLeaf :: (Either (ParseError (Pos String) Derivs)
                                  ((NameLeaf, Derivs))),
              nameLeafNoCom :: (Either (ParseError (Pos String) Derivs)
                                       ((NameLeaf, Derivs))),
              comForErr :: (Either (ParseError (Pos String) Derivs)
                                   ((String, Derivs))),
              leaf :: (Either (ParseError (Pos String) Derivs)
                              (((ReadFrom, Maybe ((ExpQ, String))), Derivs))),
              patOp :: (Either (ParseError (Pos String) Derivs)
                               ((PatQ, Derivs))),
              pat :: (Either (ParseError (Pos String) Derivs) ((PatQ, Derivs))),
              pat1 :: (Either (ParseError (Pos String) Derivs) ((PatQ, Derivs))),
              patList :: (Either (ParseError (Pos String) Derivs)
                                 (([PatQ], Derivs))),
              opConName :: (Either (ParseError (Pos String) Derivs)
                                   ((Name, Derivs))),
              charLit :: (Either (ParseError (Pos String) Derivs)
                                 ((Char, Derivs))),
              stringLit :: (Either (ParseError (Pos String) Derivs)
                                   ((String, Derivs))),
              escapeC :: (Either (ParseError (Pos String) Derivs)
                                 ((Char, Derivs))),
              pats :: (Either (ParseError (Pos String) Derivs)
                              ((PatQs, Derivs))),
              readFromLs :: (Either (ParseError (Pos String) Derivs)
                                    ((ReadFrom, Derivs))),
              readFrom :: (Either (ParseError (Pos String) Derivs)
                                  ((ReadFrom, Derivs))),
              selectCharsLs :: (Either (ParseError (Pos String) Derivs)
                                       ((ReadFrom, Derivs))),
              selectChars :: (Either (ParseError (Pos String) Derivs)
                                     ((ReadFrom, Derivs))),
              test :: (Either (ParseError (Pos String) Derivs)
                              (((ExR, String), Derivs))),
              hsExpLam :: (Either (ParseError (Pos String) Derivs)
                                  ((ExR, Derivs))),
              hsExpTyp :: (Either (ParseError (Pos String) Derivs)
                                  ((ExR, Derivs))),
              hsExpOp :: (Either (ParseError (Pos String) Derivs)
                                 ((ExR, Derivs))),
              hsOp :: (Either (ParseError (Pos String) Derivs) ((ExR, Derivs))),
              opTail :: (Either (ParseError (Pos String) Derivs)
                                ((String, Derivs))),
              hsExp :: (Either (ParseError (Pos String) Derivs) ((Ex, Derivs))),
              hsExp1 :: (Either (ParseError (Pos String) Derivs)
                                ((ExR, Derivs))),
              hsExpTpl :: (Either (ParseError (Pos String) Derivs)
                                  ((ExRL, Derivs))),
              hsTypeArr :: (Either (ParseError (Pos String) Derivs)
                                   ((TypeQ, Derivs))),
              hsType :: (Either (ParseError (Pos String) Derivs)
                                ((Typ, Derivs))),
              hsType1 :: (Either (ParseError (Pos String) Derivs)
                                 ((TypeQ, Derivs))),
              hsTypeTpl :: (Either (ParseError (Pos String) Derivs)
                                   ((TypeQL, Derivs))),
              typ :: (Either (ParseError (Pos String) Derivs)
                             ((String, Derivs))),
              variable :: (Either (ParseError (Pos String) Derivs)
                                  ((String, Derivs))),
              tvtail :: (Either (ParseError (Pos String) Derivs)
                                ((String, Derivs))),
              integer :: (Either (ParseError (Pos String) Derivs)
                                 ((Integer, Derivs))),
              alpha :: (Either (ParseError (Pos String) Derivs)
                               ((Char, Derivs))),
              upper :: (Either (ParseError (Pos String) Derivs)
                               ((Char, Derivs))),
              lower :: (Either (ParseError (Pos String) Derivs)
                               ((Char, Derivs))),
              digit :: (Either (ParseError (Pos String) Derivs)
                               ((Char, Derivs))),
              spaces :: (Either (ParseError (Pos String) Derivs) (((), Derivs))),
              space :: (Either (ParseError (Pos String) Derivs) (((), Derivs))),
              notNLString :: (Either (ParseError (Pos String) Derivs)
                                     ((String, Derivs))),
              newLine :: (Either (ParseError (Pos String) Derivs)
                                 (((), Derivs))),
              comment :: (Either (ParseError (Pos String) Derivs)
                                 (((), Derivs))),
              comments :: (Either (ParseError (Pos String) Derivs)
                                  (((), Derivs))),
              notComStr :: (Either (ParseError (Pos String) Derivs)
                                   (((), Derivs))),
              comEnd :: (Either (ParseError (Pos String) Derivs) (((), Derivs))),
              char :: (Either (ParseError (Pos String) Derivs)
                              ((Token String, Derivs))),
              position :: (Pos String)}
parse :: String -> Derivs
parse = parse0_0 initialPos
          where parse0_0 pos s = d
                             where d = Derivs pegFile80_1 pragmas81_2 pragma82_3 pragmaStr83_4 pragmaItems84_5 pragmaEnd85_6 moduleDec86_7 moduleName87_8 moduleDecStr88_9 whr89_10 preImpPap90_11 prePeg91_12 afterPeg92_13 importPapillon93_14 varToken94_15 typToken95_16 pap96_17 peg97_18 sourceType98_19 peg_99_20 definition100_21 selection101_22 normalSelection102_23 plainSelection103_24 expressionHs104_25 expressionHsSugar105_26 plainExpressionHs106_27 plainReadFromLs107_28 expression108_29 nameLeaf_109_30 nameLeaf110_31 nameLeafNoCom111_32 comForErr112_33 leaf113_34 patOp114_35 pat115_36 pat1116_37 patList117_38 opConName118_39 charLit119_40 stringLit120_41 escapeC121_42 pats122_43 readFromLs123_44 readFrom124_45 selectCharsLs125_46 selectChars126_47 test127_48 hsExpLam128_49 hsExpTyp129_50 hsExpOp130_51 hsOp131_52 opTail132_53 hsExp133_54 hsExp1134_55 hsExpTpl135_56 hsTypeArr136_57 hsType137_58 hsType1138_59 hsTypeTpl139_60 typ140_61 variable141_62 tvtail142_63 integer143_64 alpha144_65 upper145_66 lower146_67 digit147_68 spaces148_69 space149_70 notNLString150_71 newLine151_72 comment152_73 comments153_74 notComStr154_75 comEnd155_76 chars156_77 pos
                                   pegFile80_1 = runStateT pegFile4_78 d
                                   pragmas81_2 = runStateT pragmas5_79 d
                                   pragma82_3 = runStateT pragma6_80 d
                                   pragmaStr83_4 = runStateT pragmaStr7_81 d
                                   pragmaItems84_5 = runStateT pragmaItems8_82 d
                                   pragmaEnd85_6 = runStateT pragmaEnd9_83 d
                                   moduleDec86_7 = runStateT moduleDec10_84 d
                                   moduleName87_8 = runStateT moduleName11_85 d
                                   moduleDecStr88_9 = runStateT moduleDecStr12_86 d
                                   whr89_10 = runStateT whr13_87 d
                                   preImpPap90_11 = runStateT preImpPap14_88 d
                                   prePeg91_12 = runStateT prePeg15_89 d
                                   afterPeg92_13 = runStateT afterPeg16_90 d
                                   importPapillon93_14 = runStateT importPapillon17_91 d
                                   varToken94_15 = runStateT varToken18_92 d
                                   typToken95_16 = runStateT typToken19_93 d
                                   pap96_17 = runStateT pap20_94 d
                                   peg97_18 = runStateT peg21_95 d
                                   sourceType98_19 = runStateT sourceType22_96 d
                                   peg_99_20 = runStateT peg_23_97 d
                                   definition100_21 = runStateT definition24_98 d
                                   selection101_22 = runStateT selection25_99 d
                                   normalSelection102_23 = runStateT normalSelection26_100 d
                                   plainSelection103_24 = runStateT plainSelection27_101 d
                                   expressionHs104_25 = runStateT expressionHs28_102 d
                                   expressionHsSugar105_26 = runStateT expressionHsSugar29_103 d
                                   plainExpressionHs106_27 = runStateT plainExpressionHs30_104 d
                                   plainReadFromLs107_28 = runStateT plainReadFromLs31_105 d
                                   expression108_29 = runStateT expression32_106 d
                                   nameLeaf_109_30 = runStateT nameLeaf_33_107 d
                                   nameLeaf110_31 = runStateT nameLeaf34_108 d
                                   nameLeafNoCom111_32 = runStateT nameLeafNoCom35_109 d
                                   comForErr112_33 = runStateT comForErr36_110 d
                                   leaf113_34 = runStateT leaf37_111 d
                                   patOp114_35 = runStateT patOp38_112 d
                                   pat115_36 = runStateT pat39_113 d
                                   pat1116_37 = runStateT pat140_114 d
                                   patList117_38 = runStateT patList41_115 d
                                   opConName118_39 = runStateT opConName42_116 d
                                   charLit119_40 = runStateT charLit43_117 d
                                   stringLit120_41 = runStateT stringLit44_118 d
                                   escapeC121_42 = runStateT escapeC45_119 d
                                   pats122_43 = runStateT pats46_120 d
                                   readFromLs123_44 = runStateT readFromLs47_121 d
                                   readFrom124_45 = runStateT readFrom48_122 d
                                   selectCharsLs125_46 = runStateT selectCharsLs49_123 d
                                   selectChars126_47 = runStateT selectChars50_124 d
                                   test127_48 = runStateT test51_125 d
                                   hsExpLam128_49 = runStateT hsExpLam52_126 d
                                   hsExpTyp129_50 = runStateT hsExpTyp53_127 d
                                   hsExpOp130_51 = runStateT hsExpOp54_128 d
                                   hsOp131_52 = runStateT hsOp55_129 d
                                   opTail132_53 = runStateT opTail56_130 d
                                   hsExp133_54 = runStateT hsExp57_131 d
                                   hsExp1134_55 = runStateT hsExp158_132 d
                                   hsExpTpl135_56 = runStateT hsExpTpl59_133 d
                                   hsTypeArr136_57 = runStateT hsTypeArr60_134 d
                                   hsType137_58 = runStateT hsType61_135 d
                                   hsType1138_59 = runStateT hsType162_136 d
                                   hsTypeTpl139_60 = runStateT hsTypeTpl63_137 d
                                   typ140_61 = runStateT typ64_138 d
                                   variable141_62 = runStateT variable65_139 d
                                   tvtail142_63 = runStateT tvtail66_140 d
                                   integer143_64 = runStateT integer67_141 d
                                   alpha144_65 = runStateT alpha68_142 d
                                   upper145_66 = runStateT upper69_143 d
                                   lower146_67 = runStateT lower70_144 d
                                   digit147_68 = runStateT digit71_145 d
                                   spaces148_69 = runStateT spaces72_146 d
                                   space149_70 = runStateT space73_147 d
                                   notNLString150_71 = runStateT notNLString74_148 d
                                   newLine151_72 = runStateT newLine75_149 d
                                   comment152_73 = runStateT comment76_150 d
                                   comments153_74 = runStateT comments77_151 d
                                   notComStr154_75 = runStateT notComStr78_152 d
                                   comEnd155_76 = runStateT comEnd79_153 d
                                   chars156_77 = runStateT (case getToken s of
                                                                Just (c,
                                                                      s') -> do put (parse0_0 (updatePos c pos) s')
                                                                                return c
                                                                _ -> gets position >>= (throwError . mkParseError "" "end of input" "" undefined [])) d
                pegFile4_78 = foldl1 mplus [do pr <- StateT pragmas
                                               md <- StateT moduleDec
                                               pip <- StateT preImpPap
                                               _ <- StateT importPapillon
                                               return ()
                                               pp <- StateT prePeg
                                               _ <- StateT pap
                                               return ()
                                               p <- StateT peg
                                               _ <- StateT spaces
                                               return ()
                                               d174_154 <- get
                                               xx173_155 <- StateT char
                                               case xx173_155 of
                                                   '|' -> return ()
                                                   _ -> gets position >>= (throwError . mkParseError "'|'" "not match pattern: " "" d174_154 ["char"])
                                               let '|' = xx173_155
                                               return ()
                                               d176_156 <- get
                                               xx175_157 <- StateT char
                                               case xx175_157 of
                                                   ']' -> return ()
                                                   _ -> gets position >>= (throwError . mkParseError "']'" "not match pattern: " "" d176_156 ["char"])
                                               let ']' = xx175_157
                                               return ()
                                               d178_158 <- get
                                               xx177_159 <- StateT char
                                               case xx177_159 of
                                                   '\n' -> return ()
                                                   _ -> gets position >>= (throwError . mkParseError "'\\n'" "not match pattern: " "" d178_158 ["char"])
                                               let '\n' = xx177_159
                                               return ()
                                               atp <- StateT afterPeg
                                               return (mkPegFile pr md pip pp p atp),
                                            do pr <- StateT pragmas
                                               md <- StateT moduleDec
                                               pp <- StateT prePeg
                                               _ <- StateT pap
                                               return ()
                                               p <- StateT peg
                                               _ <- StateT spaces
                                               return ()
                                               d194_160 <- get
                                               xx193_161 <- StateT char
                                               case xx193_161 of
                                                   '|' -> return ()
                                                   _ -> gets position >>= (throwError . mkParseError "'|'" "not match pattern: " "" d194_160 ["char"])
                                               let '|' = xx193_161
                                               return ()
                                               d196_162 <- get
                                               xx195_163 <- StateT char
                                               case xx195_163 of
                                                   ']' -> return ()
                                                   _ -> gets position >>= (throwError . mkParseError "']'" "not match pattern: " "" d196_162 ["char"])
                                               let ']' = xx195_163
                                               return ()
                                               d198_164 <- get
                                               xx197_165 <- StateT char
                                               case xx197_165 of
                                                   '\n' -> return ()
                                                   _ -> gets position >>= (throwError . mkParseError "'\\n'" "not match pattern: " "" d198_164 ["char"])
                                               let '\n' = xx197_165
                                               return ()
                                               atp <- StateT afterPeg
                                               return (mkPegFile pr md emp pp p atp)]
                pragmas5_79 = foldl1 mplus [do _ <- StateT spaces
                                               return ()
                                               pr <- StateT pragma
                                               prs <- StateT pragmas
                                               return (pr : prs),
                                            do _ <- StateT spaces
                                               return ()
                                               return []]
                pragma6_80 = foldl1 mplus [do d210_166 <- get
                                              xx209_167 <- StateT char
                                              case xx209_167 of
                                                  '{' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'{'" "not match pattern: " "" d210_166 ["char"])
                                              let '{' = xx209_167
                                              return ()
                                              d212_168 <- get
                                              xx211_169 <- StateT char
                                              case xx211_169 of
                                                  '-' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'-'" "not match pattern: " "" d212_168 ["char"])
                                              let '-' = xx211_169
                                              return ()
                                              d214_170 <- get
                                              xx213_171 <- StateT char
                                              case xx213_171 of
                                                  '#' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'#'" "not match pattern: " "" d214_170 ["char"])
                                              let '#' = xx213_171
                                              return ()
                                              _ <- StateT spaces
                                              return ()
                                              d218_172 <- get
                                              xx217_173 <- StateT char
                                              case xx217_173 of
                                                  'L' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'L'" "not match pattern: " "" d218_172 ["char"])
                                              let 'L' = xx217_173
                                              return ()
                                              d220_174 <- get
                                              xx219_175 <- StateT char
                                              case xx219_175 of
                                                  'A' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'A'" "not match pattern: " "" d220_174 ["char"])
                                              let 'A' = xx219_175
                                              return ()
                                              d222_176 <- get
                                              xx221_177 <- StateT char
                                              case xx221_177 of
                                                  'N' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'N'" "not match pattern: " "" d222_176 ["char"])
                                              let 'N' = xx221_177
                                              return ()
                                              d224_178 <- get
                                              xx223_179 <- StateT char
                                              case xx223_179 of
                                                  'G' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'G'" "not match pattern: " "" d224_178 ["char"])
                                              let 'G' = xx223_179
                                              return ()
                                              d226_180 <- get
                                              xx225_181 <- StateT char
                                              case xx225_181 of
                                                  'U' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'U'" "not match pattern: " "" d226_180 ["char"])
                                              let 'U' = xx225_181
                                              return ()
                                              d228_182 <- get
                                              xx227_183 <- StateT char
                                              case xx227_183 of
                                                  'A' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'A'" "not match pattern: " "" d228_182 ["char"])
                                              let 'A' = xx227_183
                                              return ()
                                              d230_184 <- get
                                              xx229_185 <- StateT char
                                              case xx229_185 of
                                                  'G' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'G'" "not match pattern: " "" d230_184 ["char"])
                                              let 'G' = xx229_185
                                              return ()
                                              d232_186 <- get
                                              xx231_187 <- StateT char
                                              case xx231_187 of
                                                  'E' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'E'" "not match pattern: " "" d232_186 ["char"])
                                              let 'E' = xx231_187
                                              return ()
                                              _ <- StateT spaces
                                              return ()
                                              s <- StateT pragmaItems
                                              _ <- StateT pragmaEnd
                                              return ()
                                              _ <- StateT spaces
                                              return ()
                                              return (LanguagePragma s),
                                           do d242_188 <- get
                                              xx241_189 <- StateT char
                                              case xx241_189 of
                                                  '{' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'{'" "not match pattern: " "" d242_188 ["char"])
                                              let '{' = xx241_189
                                              return ()
                                              d244_190 <- get
                                              xx243_191 <- StateT char
                                              case xx243_191 of
                                                  '-' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'-'" "not match pattern: " "" d244_190 ["char"])
                                              let '-' = xx243_191
                                              return ()
                                              d246_192 <- get
                                              xx245_193 <- StateT char
                                              case xx245_193 of
                                                  '#' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'#'" "not match pattern: " "" d246_192 ["char"])
                                              let '#' = xx245_193
                                              return ()
                                              _ <- StateT spaces
                                              return ()
                                              s <- StateT pragmaStr
                                              _ <- StateT pragmaEnd
                                              return ()
                                              return (OtherPragma s)]
                pragmaStr7_81 = foldl1 mplus [do ddd253_194 <- get
                                                 do err <- ((do _ <- StateT pragmaEnd
                                                                return ()) >> return False) `catchError` const (return True)
                                                    unless err (gets position >>= (throwError . mkParseError ('!' : "_:pragmaEnd") "not match: " "" ddd253_194 ["pragmaEnd"]))
                                                 put ddd253_194
                                                 c <- StateT char
                                                 s <- StateT pragmaStr
                                                 return (c : s),
                                              return ""]
                pragmaItems8_82 = foldl1 mplus [do t <- StateT typToken
                                                   d263_195 <- get
                                                   xx262_196 <- StateT char
                                                   case xx262_196 of
                                                       ',' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "','" "not match pattern: " "" d263_195 ["char"])
                                                   let ',' = xx262_196
                                                   return ()
                                                   _ <- StateT spaces
                                                   return ()
                                                   i <- StateT pragmaItems
                                                   return (t : i),
                                                do t <- StateT typToken
                                                   return [t]]
                pragmaEnd9_83 = foldl1 mplus [do _ <- StateT spaces
                                                 return ()
                                                 d273_197 <- get
                                                 xx272_198 <- StateT char
                                                 case xx272_198 of
                                                     '#' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'#'" "not match pattern: " "" d273_197 ["char"])
                                                 let '#' = xx272_198
                                                 return ()
                                                 d275_199 <- get
                                                 xx274_200 <- StateT char
                                                 case xx274_200 of
                                                     '-' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'-'" "not match pattern: " "" d275_199 ["char"])
                                                 let '-' = xx274_200
                                                 return ()
                                                 d277_201 <- get
                                                 xx276_202 <- StateT char
                                                 case xx276_202 of
                                                     '}' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'}'" "not match pattern: " "" d277_201 ["char"])
                                                 let '}' = xx276_202
                                                 return ()
                                                 return ()]
                moduleDec10_84 = foldl1 mplus [do d279_203 <- get
                                                  xx278_204 <- StateT char
                                                  case xx278_204 of
                                                      'm' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'m'" "not match pattern: " "" d279_203 ["char"])
                                                  let 'm' = xx278_204
                                                  return ()
                                                  d281_205 <- get
                                                  xx280_206 <- StateT char
                                                  case xx280_206 of
                                                      'o' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'o'" "not match pattern: " "" d281_205 ["char"])
                                                  let 'o' = xx280_206
                                                  return ()
                                                  d283_207 <- get
                                                  xx282_208 <- StateT char
                                                  case xx282_208 of
                                                      'd' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'d'" "not match pattern: " "" d283_207 ["char"])
                                                  let 'd' = xx282_208
                                                  return ()
                                                  d285_209 <- get
                                                  xx284_210 <- StateT char
                                                  case xx284_210 of
                                                      'u' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'u'" "not match pattern: " "" d285_209 ["char"])
                                                  let 'u' = xx284_210
                                                  return ()
                                                  d287_211 <- get
                                                  xx286_212 <- StateT char
                                                  case xx286_212 of
                                                      'l' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'l'" "not match pattern: " "" d287_211 ["char"])
                                                  let 'l' = xx286_212
                                                  return ()
                                                  d289_213 <- get
                                                  xx288_214 <- StateT char
                                                  case xx288_214 of
                                                      'e' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'e'" "not match pattern: " "" d289_213 ["char"])
                                                  let 'e' = xx288_214
                                                  return ()
                                                  _ <- StateT spaces
                                                  return ()
                                                  n <- StateT moduleName
                                                  _ <- StateT spaces
                                                  return ()
                                                  d297_215 <- get
                                                  xx296_216 <- StateT char
                                                  case xx296_216 of
                                                      '(' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'('" "not match pattern: " "" d297_215 ["char"])
                                                  let '(' = xx296_216
                                                  return ()
                                                  _ <- StateT spaces
                                                  return ()
                                                  s <- StateT moduleDecStr
                                                  _ <- StateT whr
                                                  return ()
                                                  return (Just (n, Just s)),
                                               do d305_217 <- get
                                                  xx304_218 <- StateT char
                                                  case xx304_218 of
                                                      'm' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'m'" "not match pattern: " "" d305_217 ["char"])
                                                  let 'm' = xx304_218
                                                  return ()
                                                  d307_219 <- get
                                                  xx306_220 <- StateT char
                                                  case xx306_220 of
                                                      'o' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'o'" "not match pattern: " "" d307_219 ["char"])
                                                  let 'o' = xx306_220
                                                  return ()
                                                  d309_221 <- get
                                                  xx308_222 <- StateT char
                                                  case xx308_222 of
                                                      'd' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'d'" "not match pattern: " "" d309_221 ["char"])
                                                  let 'd' = xx308_222
                                                  return ()
                                                  d311_223 <- get
                                                  xx310_224 <- StateT char
                                                  case xx310_224 of
                                                      'u' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'u'" "not match pattern: " "" d311_223 ["char"])
                                                  let 'u' = xx310_224
                                                  return ()
                                                  d313_225 <- get
                                                  xx312_226 <- StateT char
                                                  case xx312_226 of
                                                      'l' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'l'" "not match pattern: " "" d313_225 ["char"])
                                                  let 'l' = xx312_226
                                                  return ()
                                                  d315_227 <- get
                                                  xx314_228 <- StateT char
                                                  case xx314_228 of
                                                      'e' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'e'" "not match pattern: " "" d315_227 ["char"])
                                                  let 'e' = xx314_228
                                                  return ()
                                                  _ <- StateT spaces
                                                  return ()
                                                  n <- StateT moduleName
                                                  _ <- StateT spaces
                                                  return ()
                                                  d323_229 <- get
                                                  xx322_230 <- StateT char
                                                  case xx322_230 of
                                                      'w' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'w'" "not match pattern: " "" d323_229 ["char"])
                                                  let 'w' = xx322_230
                                                  return ()
                                                  d325_231 <- get
                                                  xx324_232 <- StateT char
                                                  case xx324_232 of
                                                      'h' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'h'" "not match pattern: " "" d325_231 ["char"])
                                                  let 'h' = xx324_232
                                                  return ()
                                                  d327_233 <- get
                                                  xx326_234 <- StateT char
                                                  case xx326_234 of
                                                      'e' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'e'" "not match pattern: " "" d327_233 ["char"])
                                                  let 'e' = xx326_234
                                                  return ()
                                                  d329_235 <- get
                                                  xx328_236 <- StateT char
                                                  case xx328_236 of
                                                      'r' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'r'" "not match pattern: " "" d329_235 ["char"])
                                                  let 'r' = xx328_236
                                                  return ()
                                                  d331_237 <- get
                                                  xx330_238 <- StateT char
                                                  case xx330_238 of
                                                      'e' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'e'" "not match pattern: " "" d331_237 ["char"])
                                                  let 'e' = xx330_238
                                                  return ()
                                                  _ <- StateT spaces
                                                  return ()
                                                  return (Just (n, Nothing)),
                                               return Nothing]
                moduleName11_85 = foldl1 mplus [do t <- StateT typ
                                                   d337_239 <- get
                                                   xx336_240 <- StateT char
                                                   case xx336_240 of
                                                       '.' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "'.'" "not match pattern: " "" d337_239 ["char"])
                                                   let '.' = xx336_240
                                                   return ()
                                                   n <- StateT moduleName
                                                   return (t : n),
                                                do t <- StateT typ
                                                   return [t]]
                moduleDecStr12_86 = foldl1 mplus [do ddd342_241 <- get
                                                     do err <- ((do _ <- StateT whr
                                                                    return ()) >> return False) `catchError` const (return True)
                                                        unless err (gets position >>= (throwError . mkParseError ('!' : "_:whr") "not match: " "" ddd342_241 ["whr"]))
                                                     put ddd342_241
                                                     c <- StateT char
                                                     s <- StateT moduleDecStr
                                                     return (c : s),
                                                  return ""]
                whr13_87 = foldl1 mplus [do _ <- StateT spaces
                                            return ()
                                            d352_242 <- get
                                            xx351_243 <- StateT char
                                            case xx351_243 of
                                                ')' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "')'" "not match pattern: " "" d352_242 ["char"])
                                            let ')' = xx351_243
                                            return ()
                                            _ <- StateT spaces
                                            return ()
                                            d356_244 <- get
                                            xx355_245 <- StateT char
                                            case xx355_245 of
                                                'w' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'w'" "not match pattern: " "" d356_244 ["char"])
                                            let 'w' = xx355_245
                                            return ()
                                            d358_246 <- get
                                            xx357_247 <- StateT char
                                            case xx357_247 of
                                                'h' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'h'" "not match pattern: " "" d358_246 ["char"])
                                            let 'h' = xx357_247
                                            return ()
                                            d360_248 <- get
                                            xx359_249 <- StateT char
                                            case xx359_249 of
                                                'e' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'e'" "not match pattern: " "" d360_248 ["char"])
                                            let 'e' = xx359_249
                                            return ()
                                            d362_250 <- get
                                            xx361_251 <- StateT char
                                            case xx361_251 of
                                                'r' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'r'" "not match pattern: " "" d362_250 ["char"])
                                            let 'r' = xx361_251
                                            return ()
                                            d364_252 <- get
                                            xx363_253 <- StateT char
                                            case xx363_253 of
                                                'e' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'e'" "not match pattern: " "" d364_252 ["char"])
                                            let 'e' = xx363_253
                                            return ()
                                            return ()]
                preImpPap14_88 = foldl1 mplus [do ddd365_254 <- get
                                                  do err <- ((do _ <- StateT importPapillon
                                                                 return ()) >> return False) `catchError` const (return True)
                                                     unless err (gets position >>= (throwError . mkParseError ('!' : "_:importPapillon") "not match: " "" ddd365_254 ["importPapillon"]))
                                                  put ddd365_254
                                                  ddd368_255 <- get
                                                  do err <- ((do _ <- StateT pap
                                                                 return ()) >> return False) `catchError` const (return True)
                                                     unless err (gets position >>= (throwError . mkParseError ('!' : "_:pap") "not match: " "" ddd368_255 ["pap"]))
                                                  put ddd368_255
                                                  c <- StateT char
                                                  pip <- StateT preImpPap
                                                  return (cons c pip),
                                               return emp]
                prePeg15_89 = foldl1 mplus [do ddd375_256 <- get
                                               do err <- ((do _ <- StateT pap
                                                              return ()) >> return False) `catchError` const (return True)
                                                  unless err (gets position >>= (throwError . mkParseError ('!' : "_:pap") "not match: " "" ddd375_256 ["pap"]))
                                               put ddd375_256
                                               c <- StateT char
                                               pp <- StateT prePeg
                                               return (cons c pp),
                                            return emp]
                afterPeg16_90 = foldl1 mplus [do c <- StateT char
                                                 atp <- StateT afterPeg
                                                 return (cons c atp),
                                              return emp]
                importPapillon17_91 = foldl1 mplus [do d387_257 <- get
                                                       xx386_258 <- StateT varToken
                                                       case xx386_258 of
                                                           "import" -> return ()
                                                           _ -> gets position >>= (throwError . mkParseError "\"import\"" "not match pattern: " "" d387_257 ["varToken"])
                                                       let "import" = xx386_258
                                                       return ()
                                                       d389_259 <- get
                                                       xx388_260 <- StateT typToken
                                                       case xx388_260 of
                                                           "Text" -> return ()
                                                           _ -> gets position >>= (throwError . mkParseError "\"Text\"" "not match pattern: " "" d389_259 ["typToken"])
                                                       let "Text" = xx388_260
                                                       return ()
                                                       d391_261 <- get
                                                       xx390_262 <- StateT char
                                                       case xx390_262 of
                                                           '.' -> return ()
                                                           _ -> gets position >>= (throwError . mkParseError "'.'" "not match pattern: " "" d391_261 ["char"])
                                                       let '.' = xx390_262
                                                       return ()
                                                       _ <- StateT spaces
                                                       return ()
                                                       d395_263 <- get
                                                       xx394_264 <- StateT typToken
                                                       case xx394_264 of
                                                           "Papillon" -> return ()
                                                           _ -> gets position >>= (throwError . mkParseError "\"Papillon\"" "not match pattern: " "" d395_263 ["typToken"])
                                                       let "Papillon" = xx394_264
                                                       return ()
                                                       ddd396_265 <- get
                                                       do err <- ((do d398_266 <- get
                                                                      xx397_267 <- StateT char
                                                                      case xx397_267 of
                                                                          '.' -> return ()
                                                                          _ -> gets position >>= (throwError . mkParseError "'.'" "not match pattern: " "" d398_266 ["char"])
                                                                      let '.' = xx397_267
                                                                      return ()) >> return False) `catchError` const (return True)
                                                          unless err (gets position >>= (throwError . mkParseError ('!' : "'.':") "not match: " "" ddd396_265 ["char"]))
                                                       put ddd396_265
                                                       return ()]
                varToken18_92 = foldl1 mplus [do v <- StateT variable
                                                 _ <- StateT spaces
                                                 return ()
                                                 return v]
                typToken19_93 = foldl1 mplus [do t <- StateT typ
                                                 _ <- StateT spaces
                                                 return ()
                                                 return t]
                pap20_94 = foldl1 mplus [do d408_268 <- get
                                            xx407_269 <- StateT char
                                            case xx407_269 of
                                                '\n' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'\\n'" "not match pattern: " "" d408_268 ["char"])
                                            let '\n' = xx407_269
                                            return ()
                                            d410_270 <- get
                                            xx409_271 <- StateT char
                                            case xx409_271 of
                                                '[' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'['" "not match pattern: " "" d410_270 ["char"])
                                            let '[' = xx409_271
                                            return ()
                                            d412_272 <- get
                                            xx411_273 <- StateT char
                                            case xx411_273 of
                                                'p' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'p'" "not match pattern: " "" d412_272 ["char"])
                                            let 'p' = xx411_273
                                            return ()
                                            d414_274 <- get
                                            xx413_275 <- StateT char
                                            case xx413_275 of
                                                'a' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'a'" "not match pattern: " "" d414_274 ["char"])
                                            let 'a' = xx413_275
                                            return ()
                                            d416_276 <- get
                                            xx415_277 <- StateT char
                                            case xx415_277 of
                                                'p' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'p'" "not match pattern: " "" d416_276 ["char"])
                                            let 'p' = xx415_277
                                            return ()
                                            d418_278 <- get
                                            xx417_279 <- StateT char
                                            case xx417_279 of
                                                'i' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'i'" "not match pattern: " "" d418_278 ["char"])
                                            let 'i' = xx417_279
                                            return ()
                                            d420_280 <- get
                                            xx419_281 <- StateT char
                                            case xx419_281 of
                                                'l' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'l'" "not match pattern: " "" d420_280 ["char"])
                                            let 'l' = xx419_281
                                            return ()
                                            d422_282 <- get
                                            xx421_283 <- StateT char
                                            case xx421_283 of
                                                'l' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'l'" "not match pattern: " "" d422_282 ["char"])
                                            let 'l' = xx421_283
                                            return ()
                                            d424_284 <- get
                                            xx423_285 <- StateT char
                                            case xx423_285 of
                                                'o' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'o'" "not match pattern: " "" d424_284 ["char"])
                                            let 'o' = xx423_285
                                            return ()
                                            d426_286 <- get
                                            xx425_287 <- StateT char
                                            case xx425_287 of
                                                'n' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'n'" "not match pattern: " "" d426_286 ["char"])
                                            let 'n' = xx425_287
                                            return ()
                                            d428_288 <- get
                                            xx427_289 <- StateT char
                                            case xx427_289 of
                                                '|' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'|'" "not match pattern: " "" d428_288 ["char"])
                                            let '|' = xx427_289
                                            return ()
                                            d430_290 <- get
                                            xx429_291 <- StateT char
                                            case xx429_291 of
                                                '\n' -> return ()
                                                _ -> gets position >>= (throwError . mkParseError "'\\n'" "not match pattern: " "" d430_290 ["char"])
                                            let '\n' = xx429_291
                                            return ()
                                            return ()]
                peg21_95 = foldl1 mplus [do _ <- StateT spaces
                                            return ()
                                            s <- StateT sourceType
                                            p <- StateT peg_
                                            return (mkTTPeg s p),
                                         do p <- StateT peg_
                                            return (mkTTPeg tString p)]
                sourceType22_96 = foldl1 mplus [do d440_292 <- get
                                                   xx439_293 <- StateT varToken
                                                   case xx439_293 of
                                                       "source" -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "\"source\"" "not match pattern: " "" d440_292 ["varToken"])
                                                   let "source" = xx439_293
                                                   return ()
                                                   d442_294 <- get
                                                   xx441_295 <- StateT char
                                                   case xx441_295 of
                                                       ':' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "':'" "not match pattern: " "" d442_294 ["char"])
                                                   let ':' = xx441_295
                                                   return ()
                                                   _ <- StateT spaces
                                                   return ()
                                                   v <- StateT typToken
                                                   return v]
                peg_23_97 = foldl1 mplus [do _ <- StateT spaces
                                             return ()
                                             d <- StateT definition
                                             p <- StateT peg_
                                             return (cons d p),
                                          return emp]
                definition24_98 = foldl1 mplus [do v <- StateT variable
                                                   _ <- StateT spaces
                                                   return ()
                                                   d458_296 <- get
                                                   xx457_297 <- StateT char
                                                   case xx457_297 of
                                                       ':' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "':'" "not match pattern: " "" d458_296 ["char"])
                                                   let ':' = xx457_297
                                                   return ()
                                                   d460_298 <- get
                                                   xx459_299 <- StateT char
                                                   case xx459_299 of
                                                       ':' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "':'" "not match pattern: " "" d460_298 ["char"])
                                                   let ':' = xx459_299
                                                   return ()
                                                   _ <- StateT spaces
                                                   return ()
                                                   t <- StateT hsTypeArr
                                                   _ <- StateT spaces
                                                   return ()
                                                   d468_300 <- get
                                                   xx467_301 <- StateT char
                                                   case xx467_301 of
                                                       '=' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "'='" "not match pattern: " "" d468_300 ["char"])
                                                   let '=' = xx467_301
                                                   return ()
                                                   _ <- StateT spaces
                                                   return ()
                                                   sel <- StateT selection
                                                   _ <- StateT spaces
                                                   return ()
                                                   d476_302 <- get
                                                   xx475_303 <- StateT char
                                                   case xx475_303 of
                                                       ';' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "';'" "not match pattern: " "" d476_302 ["char"])
                                                   let ';' = xx475_303
                                                   return ()
                                                   return (mkDef v t sel),
                                                do v <- StateT variable
                                                   _ <- StateT spaces
                                                   return ()
                                                   d482_304 <- get
                                                   xx481_305 <- StateT char
                                                   case xx481_305 of
                                                       '<' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "'<'" "not match pattern: " "" d482_304 ["char"])
                                                   let '<' = xx481_305
                                                   return ()
                                                   d484_306 <- get
                                                   xx483_307 <- StateT char
                                                   case xx483_307 of
                                                       '-' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "'-'" "not match pattern: " "" d484_306 ["char"])
                                                   let '-' = xx483_307
                                                   return ()
                                                   _ <- StateT spaces
                                                   return ()
                                                   sel <- StateT plainSelection
                                                   _ <- StateT spaces
                                                   return ()
                                                   d492_308 <- get
                                                   xx491_309 <- StateT char
                                                   case xx491_309 of
                                                       ';' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "';'" "not match pattern: " "" d492_308 ["char"])
                                                   let ';' = xx491_309
                                                   return ()
                                                   return (PlainDefinition v sel)]
                selection25_99 = foldl1 mplus [do s <- StateT normalSelection
                                                  return s,
                                               do s <- StateT plainSelection
                                                  return s]
                normalSelection26_100 = foldl1 mplus [do ex <- StateT expressionHs
                                                         _ <- StateT spaces
                                                         return ()
                                                         d502_310 <- get
                                                         xx501_311 <- StateT char
                                                         case xx501_311 of
                                                             '/' -> return ()
                                                             _ -> gets position >>= (throwError . mkParseError "'/'" "not match pattern: " "" d502_310 ["char"])
                                                         let '/' = xx501_311
                                                         return ()
                                                         _ <- StateT spaces
                                                         return ()
                                                         sel <- StateT normalSelection
                                                         return (Selection $ ex : expressions sel),
                                                      do ex <- StateT expressionHs
                                                         return (Selection [ex])]
                plainSelection27_101 = foldl1 mplus [do ex <- StateT plainExpressionHs
                                                        _ <- StateT spaces
                                                        return ()
                                                        d514_312 <- get
                                                        xx513_313 <- StateT char
                                                        case xx513_313 of
                                                            '/' -> return ()
                                                            _ -> gets position >>= (throwError . mkParseError "'/'" "not match pattern: " "" d514_312 ["char"])
                                                        let '/' = xx513_313
                                                        return ()
                                                        _ <- StateT spaces
                                                        return ()
                                                        sel <- StateT plainSelection
                                                        return (PlainSelection $ ex : plainExpressions sel),
                                                     do ex <- StateT plainExpressionHs
                                                        return (PlainSelection [ex])]
                expressionHs28_102 = foldl1 mplus [do e <- StateT expression
                                                      _ <- StateT spaces
                                                      return ()
                                                      d526_314 <- get
                                                      xx525_315 <- StateT char
                                                      case xx525_315 of
                                                          '{' -> return ()
                                                          _ -> gets position >>= (throwError . mkParseError "'{'" "not match pattern: " "" d526_314 ["char"])
                                                      let '{' = xx525_315
                                                      return ()
                                                      _ <- StateT spaces
                                                      return ()
                                                      h <- StateT hsExpLam
                                                      _ <- StateT spaces
                                                      return ()
                                                      d534_316 <- get
                                                      xx533_317 <- StateT char
                                                      case xx533_317 of
                                                          '}' -> return ()
                                                          _ -> gets position >>= (throwError . mkParseError "'}'" "not match pattern: " "" d534_316 ["char"])
                                                      let '}' = xx533_317
                                                      return ()
                                                      return (ExpressionHs e h),
                                                   do e <- StateT expressionHsSugar
                                                      return e]
                expressionHsSugar29_103 = foldl1 mplus [do d538_318 <- get
                                                           xx537_319 <- StateT char
                                                           case xx537_319 of
                                                               '<' -> return ()
                                                               _ -> gets position >>= (throwError . mkParseError "'<'" "not match pattern: " "" d538_318 ["char"])
                                                           let '<' = xx537_319
                                                           return ()
                                                           _ <- StateT spaces
                                                           return ()
                                                           h <- StateT hsExpLam
                                                           _ <- StateT spaces
                                                           return ()
                                                           d546_320 <- get
                                                           xx545_321 <- StateT char
                                                           case xx545_321 of
                                                               '>' -> return ()
                                                               _ -> gets position >>= (throwError . mkParseError "'>'" "not match pattern: " "" d546_320 ["char"])
                                                           let '>' = xx545_321
                                                           return ()
                                                           return (ExpressionHsSugar h)]
                plainExpressionHs30_104 = foldl1 mplus [do rfs <- list1_322 (foldl1 mplus [do rf <- StateT plainReadFromLs
                                                                                              _ <- StateT spaces
                                                                                              return ()
                                                                                              return rf])
                                                           return (PlainExpressionHs rfs)]
                plainReadFromLs31_105 = foldl1 mplus [do rf <- StateT readFromLs
                                                         return rf,
                                                      do rf <- StateT selectCharsLs
                                                         return rf]
                expression32_106 = foldl1 mplus [do l <- StateT nameLeaf_
                                                    _ <- StateT spaces
                                                    return ()
                                                    e <- StateT expression
                                                    return (cons l e),
                                                 return emp]
                nameLeaf_33_107 = foldl1 mplus [do d564_323 <- get
                                                   xx563_324 <- StateT char
                                                   case xx563_324 of
                                                       '!' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "'!'" "not match pattern: " "" d564_323 ["char"])
                                                   let '!' = xx563_324
                                                   return ()
                                                   nl <- StateT nameLeafNoCom
                                                   _ <- StateT spaces
                                                   return ()
                                                   com <- optional3_325 (StateT comForErr)
                                                   return (NotAfter nl $ maybe "" id com),
                                                do d572_326 <- get
                                                   xx571_327 <- StateT char
                                                   let c = xx571_327
                                                   unless (isAmp c) (gets position >>= (throwError . mkParseError "isAmp c" "not match: " "" d572_326 ["char"]))
                                                   nl <- StateT nameLeaf
                                                   return (After nl),
                                                do nl <- StateT nameLeaf
                                                   return (Here nl)]
                nameLeaf34_108 = foldl1 mplus [do n <- StateT pat1
                                                  _ <- StateT spaces
                                                  return ()
                                                  com <- optional3_325 (StateT comForErr)
                                                  d584_328 <- get
                                                  xx583_329 <- StateT char
                                                  case xx583_329 of
                                                      ':' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "':'" "not match pattern: " "" d584_328 ["char"])
                                                  let ':' = xx583_329
                                                  return ()
                                                  (rf, p) <- StateT leaf
                                                  return (NameLeaf (n, maybe "" id com) rf p),
                                               do n <- StateT pat1
                                                  _ <- StateT spaces
                                                  return ()
                                                  com <- optional3_325 (StateT comForErr)
                                                  return (NameLeaf (n,
                                                                    maybe "" id com) FromToken Nothing)]
                nameLeafNoCom35_109 = foldl1 mplus [do n <- StateT pat1
                                                       _ <- StateT spaces
                                                       return ()
                                                       com <- optional3_325 (StateT comForErr)
                                                       d600_330 <- get
                                                       xx599_331 <- StateT char
                                                       case xx599_331 of
                                                           ':' -> return ()
                                                           _ -> gets position >>= (throwError . mkParseError "':'" "not match pattern: " "" d600_330 ["char"])
                                                       let ':' = xx599_331
                                                       return ()
                                                       (rf, p) <- StateT leaf
                                                       return (NameLeaf (n, maybe "" id com) rf p),
                                                    do n <- StateT pat1
                                                       _ <- StateT spaces
                                                       return ()
                                                       return (NameLeaf (n, "") FromToken Nothing)]
                comForErr36_110 = foldl1 mplus [do d608_332 <- get
                                                   xx607_333 <- StateT char
                                                   case xx607_333 of
                                                       '{' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "'{'" "not match pattern: " "" d608_332 ["char"])
                                                   let '{' = xx607_333
                                                   return ()
                                                   d610_334 <- get
                                                   xx609_335 <- StateT char
                                                   case xx609_335 of
                                                       '-' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "'-'" "not match pattern: " "" d610_334 ["char"])
                                                   let '-' = xx609_335
                                                   return ()
                                                   d612_336 <- get
                                                   xx611_337 <- StateT char
                                                   case xx611_337 of
                                                       '#' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "'#'" "not match pattern: " "" d612_336 ["char"])
                                                   let '#' = xx611_337
                                                   return ()
                                                   _ <- StateT spaces
                                                   return ()
                                                   d616_338 <- get
                                                   xx615_339 <- StateT char
                                                   case xx615_339 of
                                                       '"' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "'\"'" "not match pattern: " "" d616_338 ["char"])
                                                   let '"' = xx615_339
                                                   return ()
                                                   s <- StateT stringLit
                                                   d620_340 <- get
                                                   xx619_341 <- StateT char
                                                   case xx619_341 of
                                                       '"' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "'\"'" "not match pattern: " "" d620_340 ["char"])
                                                   let '"' = xx619_341
                                                   return ()
                                                   _ <- StateT spaces
                                                   return ()
                                                   d624_342 <- get
                                                   xx623_343 <- StateT char
                                                   case xx623_343 of
                                                       '#' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "'#'" "not match pattern: " "" d624_342 ["char"])
                                                   let '#' = xx623_343
                                                   return ()
                                                   d626_344 <- get
                                                   xx625_345 <- StateT char
                                                   case xx625_345 of
                                                       '-' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "'-'" "not match pattern: " "" d626_344 ["char"])
                                                   let '-' = xx625_345
                                                   return ()
                                                   d628_346 <- get
                                                   xx627_347 <- StateT char
                                                   case xx627_347 of
                                                       '}' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "'}'" "not match pattern: " "" d628_346 ["char"])
                                                   let '}' = xx627_347
                                                   return ()
                                                   _ <- StateT spaces
                                                   return ()
                                                   return s]
                leaf37_111 = foldl1 mplus [do rf <- StateT readFromLs
                                              t <- StateT test
                                              return (rf, Just t),
                                           do rf <- StateT readFromLs
                                              return (rf, Nothing),
                                           do t <- StateT test
                                              return (FromToken, Just t)]
                patOp38_112 = foldl1 mplus [do p <- StateT pat
                                               o <- StateT opConName
                                               po <- StateT patOp
                                               return (uInfixP p o po),
                                            do p <- StateT pat
                                               _ <- StateT spaces
                                               return ()
                                               d650_348 <- get
                                               xx649_349 <- StateT char
                                               let q = xx649_349
                                               unless (isBQ q) (gets position >>= (throwError . mkParseError "isBQ q" "not match: " "" d650_348 ["char"]))
                                               t <- StateT typ
                                               d654_350 <- get
                                               xx653_351 <- StateT char
                                               let q_ = xx653_351
                                               unless (isBQ q_) (gets position >>= (throwError . mkParseError "isBQ q_" "not match: " "" d654_350 ["char"]))
                                               _ <- StateT spaces
                                               return ()
                                               po <- StateT patOp
                                               return (uInfixP p (mkName t) po),
                                            do p <- StateT pat
                                               return p]
                pat39_113 = foldl1 mplus [do t <- StateT typ
                                             _ <- StateT spaces
                                             return ()
                                             ps <- StateT pats
                                             return (conToPatQ t ps),
                                          do d668_352 <- get
                                             xx667_353 <- StateT char
                                             case xx667_353 of
                                                 '(' -> return ()
                                                 _ -> gets position >>= (throwError . mkParseError "'('" "not match pattern: " "" d668_352 ["char"])
                                             let '(' = xx667_353
                                             return ()
                                             o <- StateT opConName
                                             d672_354 <- get
                                             xx671_355 <- StateT char
                                             case xx671_355 of
                                                 ')' -> return ()
                                                 _ -> gets position >>= (throwError . mkParseError "')'" "not match pattern: " "" d672_354 ["char"])
                                             let ')' = xx671_355
                                             return ()
                                             _ <- StateT spaces
                                             return ()
                                             ps <- StateT pats
                                             return (conP o ps),
                                          do p <- StateT pat1
                                             return p]
                pat140_114 = foldl1 mplus [do t <- StateT typ
                                              return (conToPatQ t emp),
                                           do d682_356 <- get
                                              xx681_357 <- StateT variable
                                              case xx681_357 of
                                                  "_" -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "\"_\"" "not match pattern: " "" d682_356 ["variable"])
                                              let "_" = xx681_357
                                              return ()
                                              return wildP,
                                           do n <- StateT variable
                                              return (strToPatQ n),
                                           do i <- StateT integer
                                              return (litP (integerL i)),
                                           do d688_358 <- get
                                              xx687_359 <- StateT char
                                              case xx687_359 of
                                                  '-' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'-'" "not match pattern: " "" d688_358 ["char"])
                                              let '-' = xx687_359
                                              return ()
                                              _ <- StateT spaces
                                              return ()
                                              i <- StateT integer
                                              return (litP (integerL $ negate i)),
                                           do d694_360 <- get
                                              xx693_361 <- StateT char
                                              case xx693_361 of
                                                  '\'' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'\\''" "not match pattern: " "" d694_360 ["char"])
                                              let '\'' = xx693_361
                                              return ()
                                              c <- StateT charLit
                                              d698_362 <- get
                                              xx697_363 <- StateT char
                                              case xx697_363 of
                                                  '\'' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'\\''" "not match pattern: " "" d698_362 ["char"])
                                              let '\'' = xx697_363
                                              return ()
                                              return (charP c),
                                           do d700_364 <- get
                                              xx699_365 <- StateT char
                                              case xx699_365 of
                                                  '"' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'\"'" "not match pattern: " "" d700_364 ["char"])
                                              let '"' = xx699_365
                                              return ()
                                              s <- StateT stringLit
                                              d704_366 <- get
                                              xx703_367 <- StateT char
                                              case xx703_367 of
                                                  '"' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'\"'" "not match pattern: " "" d704_366 ["char"])
                                              let '"' = xx703_367
                                              return ()
                                              return (stringP s),
                                           do d706_368 <- get
                                              xx705_369 <- StateT char
                                              case xx705_369 of
                                                  '(' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'('" "not match pattern: " "" d706_368 ["char"])
                                              let '(' = xx705_369
                                              return ()
                                              p <- StateT patList
                                              d710_370 <- get
                                              xx709_371 <- StateT char
                                              case xx709_371 of
                                                  ')' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "')'" "not match pattern: " "" d710_370 ["char"])
                                              let ')' = xx709_371
                                              return ()
                                              return (tupP p),
                                           do d712_372 <- get
                                              xx711_373 <- StateT char
                                              case xx711_373 of
                                                  '[' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'['" "not match pattern: " "" d712_372 ["char"])
                                              let '[' = xx711_373
                                              return ()
                                              p <- StateT patList
                                              d716_374 <- get
                                              xx715_375 <- StateT char
                                              case xx715_375 of
                                                  ']' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "']'" "not match pattern: " "" d716_374 ["char"])
                                              let ']' = xx715_375
                                              return ()
                                              return (listP p)]
                patList41_115 = foldl1 mplus [do p <- StateT patOp
                                                 _ <- StateT spaces
                                                 return ()
                                                 d722_376 <- get
                                                 xx721_377 <- StateT char
                                                 case xx721_377 of
                                                     ',' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "','" "not match pattern: " "" d722_376 ["char"])
                                                 let ',' = xx721_377
                                                 return ()
                                                 _ <- StateT spaces
                                                 return ()
                                                 ps <- StateT patList
                                                 return (p : ps),
                                              do p <- StateT patOp
                                                 return [p],
                                              return []]
                opConName42_116 = foldl1 mplus [do d730_378 <- get
                                                   xx729_379 <- StateT char
                                                   case xx729_379 of
                                                       ':' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "':'" "not match pattern: " "" d730_378 ["char"])
                                                   let ':' = xx729_379
                                                   return ()
                                                   ot <- StateT opTail
                                                   return (mkName $ colon : ot)]
                charLit43_117 = foldl1 mplus [do d734_380 <- get
                                                 xx733_381 <- StateT char
                                                 let c = xx733_381
                                                 unless (isAlphaNumOt c) (gets position >>= (throwError . mkParseError "isAlphaNumOt c" "not match: " "" d734_380 ["char"]))
                                                 return c,
                                              do d736_382 <- get
                                                 xx735_383 <- StateT char
                                                 case xx735_383 of
                                                     '\\' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'\\\\'" "not match pattern: " "" d736_382 ["char"])
                                                 let '\\' = xx735_383
                                                 return ()
                                                 c <- StateT escapeC
                                                 return c]
                stringLit44_118 = foldl1 mplus [do d740_384 <- get
                                                   xx739_385 <- StateT char
                                                   let c = xx739_385
                                                   unless (isStrLitC c) (gets position >>= (throwError . mkParseError "isStrLitC c" "not match: " "" d740_384 ["char"]))
                                                   s <- StateT stringLit
                                                   return (cons c s),
                                                do d744_386 <- get
                                                   xx743_387 <- StateT char
                                                   case xx743_387 of
                                                       '\\' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "'\\\\'" "not match pattern: " "" d744_386 ["char"])
                                                   let '\\' = xx743_387
                                                   return ()
                                                   c <- StateT escapeC
                                                   s <- StateT stringLit
                                                   return (c : s),
                                                return emp]
                escapeC45_119 = foldl1 mplus [do d750_388 <- get
                                                 xx749_389 <- StateT char
                                                 case xx749_389 of
                                                     '"' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'\"'" "not match pattern: " "" d750_388 ["char"])
                                                 let '"' = xx749_389
                                                 return ()
                                                 return '"',
                                              do d752_390 <- get
                                                 xx751_391 <- StateT char
                                                 case xx751_391 of
                                                     '\'' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'\\''" "not match pattern: " "" d752_390 ["char"])
                                                 let '\'' = xx751_391
                                                 return ()
                                                 return '\'',
                                              do d754_392 <- get
                                                 xx753_393 <- StateT char
                                                 case xx753_393 of
                                                     '\\' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'\\\\'" "not match pattern: " "" d754_392 ["char"])
                                                 let '\\' = xx753_393
                                                 return ()
                                                 return '\\',
                                              do d756_394 <- get
                                                 xx755_395 <- StateT char
                                                 case xx755_395 of
                                                     'n' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'n'" "not match pattern: " "" d756_394 ["char"])
                                                 let 'n' = xx755_395
                                                 return ()
                                                 return '\n',
                                              do d758_396 <- get
                                                 xx757_397 <- StateT char
                                                 case xx757_397 of
                                                     't' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'t'" "not match pattern: " "" d758_396 ["char"])
                                                 let 't' = xx757_397
                                                 return ()
                                                 return tab]
                pats46_120 = foldl1 mplus [do p <- StateT pat
                                              _ <- StateT spaces
                                              return ()
                                              ps <- StateT pats
                                              return (cons p ps),
                                           return emp]
                readFromLs47_121 = foldl1 mplus [do rf <- StateT readFrom
                                                    d768_398 <- get
                                                    xx767_399 <- StateT char
                                                    case xx767_399 of
                                                        '*' -> return ()
                                                        _ -> gets position >>= (throwError . mkParseError "'*'" "not match pattern: " "" d768_398 ["char"])
                                                    let '*' = xx767_399
                                                    return ()
                                                    return (FromList rf),
                                                 do rf <- StateT readFrom
                                                    d772_400 <- get
                                                    xx771_401 <- StateT char
                                                    case xx771_401 of
                                                        '+' -> return ()
                                                        _ -> gets position >>= (throwError . mkParseError "'+'" "not match pattern: " "" d772_400 ["char"])
                                                    let '+' = xx771_401
                                                    return ()
                                                    return (FromList1 rf),
                                                 do rf <- StateT readFrom
                                                    d776_402 <- get
                                                    xx775_403 <- StateT char
                                                    case xx775_403 of
                                                        '?' -> return ()
                                                        _ -> gets position >>= (throwError . mkParseError "'?'" "not match pattern: " "" d776_402 ["char"])
                                                    let '?' = xx775_403
                                                    return ()
                                                    return (FromOptional rf),
                                                 do rf <- StateT readFrom
                                                    return rf]
                readFrom48_122 = foldl1 mplus [do v <- StateT variable
                                                  return (FromVariable v),
                                               do d782_404 <- get
                                                  xx781_405 <- StateT char
                                                  case xx781_405 of
                                                      '(' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'('" "not match pattern: " "" d782_404 ["char"])
                                                  let '(' = xx781_405
                                                  return ()
                                                  s <- StateT selection
                                                  d786_406 <- get
                                                  xx785_407 <- StateT char
                                                  case xx785_407 of
                                                      ')' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "')'" "not match pattern: " "" d786_406 ["char"])
                                                  let ')' = xx785_407
                                                  return ()
                                                  return (FromSelection s),
                                               do e <- StateT expressionHsSugar
                                                  return (FromSelection $ Selection [e])]
                selectCharsLs49_123 = foldl1 mplus [do rf <- StateT selectChars
                                                       d792_408 <- get
                                                       xx791_409 <- StateT char
                                                       case xx791_409 of
                                                           '*' -> return ()
                                                           _ -> gets position >>= (throwError . mkParseError "'*'" "not match pattern: " "" d792_408 ["char"])
                                                       let '*' = xx791_409
                                                       return ()
                                                       return (FromList rf),
                                                    do rf <- StateT selectChars
                                                       d796_410 <- get
                                                       xx795_411 <- StateT char
                                                       case xx795_411 of
                                                           '+' -> return ()
                                                           _ -> gets position >>= (throwError . mkParseError "'+'" "not match pattern: " "" d796_410 ["char"])
                                                       let '+' = xx795_411
                                                       return ()
                                                       return (FromList1 rf),
                                                    do rf <- StateT selectChars
                                                       d800_412 <- get
                                                       xx799_413 <- StateT char
                                                       case xx799_413 of
                                                           '?' -> return ()
                                                           _ -> gets position >>= (throwError . mkParseError "'?'" "not match pattern: " "" d800_412 ["char"])
                                                       let '?' = xx799_413
                                                       return ()
                                                       return (FromOptional rf),
                                                    do rf <- StateT selectChars
                                                       return rf]
                selectChars50_124 = foldl1 mplus [do d804_414 <- get
                                                     xx803_415 <- StateT char
                                                     case xx803_415 of
                                                         '[' -> return ()
                                                         _ -> gets position >>= (throwError . mkParseError "'['" "not match pattern: " "" d804_414 ["char"])
                                                     let '[' = xx803_415
                                                     return ()
                                                     cs <- list12_416 (foldl1 mplus [do d808_417 <- get
                                                                                        xx807_418 <- StateT char
                                                                                        let c = xx807_418
                                                                                        unless (isLower c) (gets position >>= (throwError . mkParseError "isLower c" "not match: " "" d808_417 ["char"]))
                                                                                        return c])
                                                     d810_419 <- get
                                                     xx809_420 <- StateT char
                                                     case xx809_420 of
                                                         ']' -> return ()
                                                         _ -> gets position >>= (throwError . mkParseError "']'" "not match pattern: " "" d810_419 ["char"])
                                                     let ']' = xx809_420
                                                     return ()
                                                     return (FromTokenChars cs),
                                                  do d812_421 <- get
                                                     xx811_422 <- StateT char
                                                     case xx811_422 of
                                                         '[' -> return ()
                                                         _ -> gets position >>= (throwError . mkParseError "'['" "not match pattern: " "" d812_421 ["char"])
                                                     let '[' = xx811_422
                                                     return ()
                                                     d814_423 <- get
                                                     xx813_424 <- StateT char
                                                     let cb = xx813_424
                                                     unless (cb `notElem` "\\-") (gets position >>= (throwError . mkParseError "cb `notElem` \"\\\\-\"" "not match: " "" d814_423 ["char"]))
                                                     d816_425 <- get
                                                     xx815_426 <- StateT char
                                                     case xx815_426 of
                                                         '-' -> return ()
                                                         _ -> gets position >>= (throwError . mkParseError "'-'" "not match pattern: " "" d816_425 ["char"])
                                                     let '-' = xx815_426
                                                     return ()
                                                     d818_427 <- get
                                                     xx817_428 <- StateT char
                                                     let ce = xx817_428
                                                     unless (ce `notElem` "\\-") (gets position >>= (throwError . mkParseError "ce `notElem` \"\\\\-\"" "not match: " "" d818_427 ["char"]))
                                                     d820_429 <- get
                                                     xx819_430 <- StateT char
                                                     case xx819_430 of
                                                         ']' -> return ()
                                                         _ -> gets position >>= (throwError . mkParseError "']'" "not match pattern: " "" d820_429 ["char"])
                                                     let ']' = xx819_430
                                                     return ()
                                                     return (FromTokenChars [cb .. ce]),
                                                  do d822_431 <- get
                                                     xx821_432 <- StateT char
                                                     case xx821_432 of
                                                         '\'' -> return ()
                                                         _ -> gets position >>= (throwError . mkParseError "'\\''" "not match pattern: " "" d822_431 ["char"])
                                                     let '\'' = xx821_432
                                                     return ()
                                                     d824_433 <- get
                                                     xx823_434 <- StateT char
                                                     let c = xx823_434
                                                     unless (c `notElem` "\\'") (gets position >>= (throwError . mkParseError "c `notElem` \"\\\\'\"" "not match: " "" d824_433 ["char"]))
                                                     d826_435 <- get
                                                     xx825_436 <- StateT char
                                                     case xx825_436 of
                                                         '\'' -> return ()
                                                         _ -> gets position >>= (throwError . mkParseError "'\\''" "not match pattern: " "" d826_435 ["char"])
                                                     let '\'' = xx825_436
                                                     return ()
                                                     return (FromTokenChars [c])]
                test51_125 = foldl1 mplus [do d828_437 <- get
                                              xx827_438 <- StateT char
                                              case xx827_438 of
                                                  '[' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "'['" "not match pattern: " "" d828_437 ["char"])
                                              let '[' = xx827_438
                                              return ()
                                              h <- StateT hsExpLam
                                              _ <- StateT spaces
                                              return ()
                                              com <- optional3_325 (StateT comForErr)
                                              d836_439 <- get
                                              xx835_440 <- StateT char
                                              case xx835_440 of
                                                  ']' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "']'" "not match pattern: " "" d836_439 ["char"])
                                              let ']' = xx835_440
                                              return ()
                                              return (h, maybe "" id com)]
                hsExpLam52_126 = foldl1 mplus [do d838_441 <- get
                                                  xx837_442 <- StateT char
                                                  case xx837_442 of
                                                      '\\' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'\\\\'" "not match pattern: " "" d838_441 ["char"])
                                                  let '\\' = xx837_442
                                                  return ()
                                                  _ <- StateT spaces
                                                  return ()
                                                  ps <- StateT pats
                                                  _ <- StateT spaces
                                                  return ()
                                                  d846_443 <- get
                                                  xx845_444 <- StateT char
                                                  case xx845_444 of
                                                      '-' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "'-'" "not match pattern: " "" d846_443 ["char"])
                                                  let '-' = xx845_444
                                                  return ()
                                                  d848_445 <- get
                                                  xx847_446 <- StateT char
                                                  let c = xx847_446
                                                  unless (isGt c) (gets position >>= (throwError . mkParseError "isGt c" "not match: " "" d848_445 ["char"]))
                                                  _ <- StateT spaces
                                                  return ()
                                                  e <- StateT hsExpTyp
                                                  return (lamE ps e),
                                               do e <- StateT hsExpTyp
                                                  return e]
                hsExpTyp53_127 = foldl1 mplus [do eo <- StateT hsExpOp
                                                  d858_447 <- get
                                                  xx857_448 <- StateT char
                                                  case xx857_448 of
                                                      ':' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "':'" "not match pattern: " "" d858_447 ["char"])
                                                  let ':' = xx857_448
                                                  return ()
                                                  d860_449 <- get
                                                  xx859_450 <- StateT char
                                                  case xx859_450 of
                                                      ':' -> return ()
                                                      _ -> gets position >>= (throwError . mkParseError "':'" "not match pattern: " "" d860_449 ["char"])
                                                  let ':' = xx859_450
                                                  return ()
                                                  _ <- StateT spaces
                                                  return ()
                                                  t <- StateT hsTypeArr
                                                  return (sigE eo t),
                                               do eo <- StateT hsExpOp
                                                  return eo]
                hsExpOp54_128 = foldl1 mplus [do l <- StateT hsExp
                                                 _ <- StateT spaces
                                                 return ()
                                                 o <- StateT hsOp
                                                 _ <- StateT spaces
                                                 return ()
                                                 r <- StateT hsExpOp
                                                 return (uInfixE (getEx l) o r),
                                              do e <- StateT hsExp
                                                 return (getEx e)]
                hsOp55_129 = foldl1 mplus [do d880_451 <- get
                                              xx879_452 <- StateT char
                                              let c = xx879_452
                                              unless (isOpHeadChar c) (gets position >>= (throwError . mkParseError "isOpHeadChar c" "not match: " "" d880_451 ["char"]))
                                              o <- StateT opTail
                                              return (varE (mkName (cons c o))),
                                           do d884_453 <- get
                                              xx883_454 <- StateT char
                                              case xx883_454 of
                                                  ':' -> return ()
                                                  _ -> gets position >>= (throwError . mkParseError "':'" "not match pattern: " "" d884_453 ["char"])
                                              let ':' = xx883_454
                                              return ()
                                              ddd885_455 <- get
                                              do err <- ((do d887_456 <- get
                                                             xx886_457 <- StateT char
                                                             case xx886_457 of
                                                                 ':' -> return ()
                                                                 _ -> gets position >>= (throwError . mkParseError "':'" "not match pattern: " "" d887_456 ["char"])
                                                             let ':' = xx886_457
                                                             return ()) >> return False) `catchError` const (return True)
                                                 unless err (gets position >>= (throwError . mkParseError ('!' : "':':") "not match: " "" ddd885_455 ["char"]))
                                              put ddd885_455
                                              o <- StateT opTail
                                              return (conE (mkName (':' : o))),
                                           do d891_458 <- get
                                              xx890_459 <- StateT char
                                              let c = xx890_459
                                              unless (isBQ c) (gets position >>= (throwError . mkParseError "isBQ c" "not match: " "" d891_458 ["char"]))
                                              v <- StateT variable
                                              d895_460 <- get
                                              xx894_461 <- StateT char
                                              let c_ = xx894_461
                                              unless (isBQ c_) (gets position >>= (throwError . mkParseError "isBQ c_" "not match: " "" d895_460 ["char"]))
                                              return (varE (mkName v)),
                                           do d897_462 <- get
                                              xx896_463 <- StateT char
                                              let c = xx896_463
                                              unless (isBQ c) (gets position >>= (throwError . mkParseError "isBQ c" "not match: " "" d897_462 ["char"]))
                                              t <- StateT typ
                                              d901_464 <- get
                                              xx900_465 <- StateT char
                                              let c_ = xx900_465
                                              unless (isBQ c_) (gets position >>= (throwError . mkParseError "isBQ c_" "not match: " "" d901_464 ["char"]))
                                              return (conE (mkName t))]
                opTail56_130 = foldl1 mplus [do d903_466 <- get
                                                xx902_467 <- StateT char
                                                let c = xx902_467
                                                unless (isOpTailChar c) (gets position >>= (throwError . mkParseError "isOpTailChar c" "not match: " "" d903_466 ["char"]))
                                                s <- StateT opTail
                                                return (cons c s),
                                             return emp]
                hsExp57_131 = foldl1 mplus [do e <- StateT hsExp1
                                               _ <- StateT spaces
                                               return ()
                                               h <- StateT hsExp
                                               return (applyExR e h),
                                            do e <- StateT hsExp1
                                               return (toEx e)]
                hsExp158_132 = foldl1 mplus [do d915_468 <- get
                                                xx914_469 <- StateT char
                                                case xx914_469 of
                                                    '(' -> return ()
                                                    _ -> gets position >>= (throwError . mkParseError "'('" "not match pattern: " "" d915_468 ["char"])
                                                let '(' = xx914_469
                                                return ()
                                                l <- optional3_325 (foldl1 mplus [do e <- StateT hsExpTyp
                                                                                     return e])
                                                _ <- StateT spaces
                                                return ()
                                                o <- StateT hsOp
                                                _ <- StateT spaces
                                                return ()
                                                r <- optional3_325 (foldl1 mplus [do e <- StateT hsExpTyp
                                                                                     return e])
                                                d931_470 <- get
                                                xx930_471 <- StateT char
                                                case xx930_471 of
                                                    ')' -> return ()
                                                    _ -> gets position >>= (throwError . mkParseError "')'" "not match pattern: " "" d931_470 ["char"])
                                                let ')' = xx930_471
                                                return ()
                                                return (infixE l o r),
                                             do d933_472 <- get
                                                xx932_473 <- StateT char
                                                case xx932_473 of
                                                    '(' -> return ()
                                                    _ -> gets position >>= (throwError . mkParseError "'('" "not match pattern: " "" d933_472 ["char"])
                                                let '(' = xx932_473
                                                return ()
                                                et <- StateT hsExpTpl
                                                d937_474 <- get
                                                xx936_475 <- StateT char
                                                case xx936_475 of
                                                    ')' -> return ()
                                                    _ -> gets position >>= (throwError . mkParseError "')'" "not match pattern: " "" d937_474 ["char"])
                                                let ')' = xx936_475
                                                return ()
                                                return (tupE et),
                                             do d939_476 <- get
                                                xx938_477 <- StateT char
                                                case xx938_477 of
                                                    '[' -> return ()
                                                    _ -> gets position >>= (throwError . mkParseError "'['" "not match pattern: " "" d939_476 ["char"])
                                                let '[' = xx938_477
                                                return ()
                                                et <- StateT hsExpTpl
                                                d943_478 <- get
                                                xx942_479 <- StateT char
                                                case xx942_479 of
                                                    ']' -> return ()
                                                    _ -> gets position >>= (throwError . mkParseError "']'" "not match pattern: " "" d943_478 ["char"])
                                                let ']' = xx942_479
                                                return ()
                                                return (listE et),
                                             do v <- StateT variable
                                                return (varE (mkName v)),
                                             do t <- StateT typ
                                                return (conE (mkName t)),
                                             do i <- StateT integer
                                                _ <- StateT spaces
                                                return ()
                                                return (litE (integerL i)),
                                             do d953_480 <- get
                                                xx952_481 <- StateT char
                                                case xx952_481 of
                                                    '\'' -> return ()
                                                    _ -> gets position >>= (throwError . mkParseError "'\\''" "not match pattern: " "" d953_480 ["char"])
                                                let '\'' = xx952_481
                                                return ()
                                                c <- StateT charLit
                                                d957_482 <- get
                                                xx956_483 <- StateT char
                                                case xx956_483 of
                                                    '\'' -> return ()
                                                    _ -> gets position >>= (throwError . mkParseError "'\\''" "not match pattern: " "" d957_482 ["char"])
                                                let '\'' = xx956_483
                                                return ()
                                                return (litE (charL c)),
                                             do d959_484 <- get
                                                xx958_485 <- StateT char
                                                case xx958_485 of
                                                    '"' -> return ()
                                                    _ -> gets position >>= (throwError . mkParseError "'\"'" "not match pattern: " "" d959_484 ["char"])
                                                let '"' = xx958_485
                                                return ()
                                                s <- StateT stringLit
                                                d963_486 <- get
                                                xx962_487 <- StateT char
                                                case xx962_487 of
                                                    '"' -> return ()
                                                    _ -> gets position >>= (throwError . mkParseError "'\"'" "not match pattern: " "" d963_486 ["char"])
                                                let '"' = xx962_487
                                                return ()
                                                return (litE (stringL s)),
                                             do d965_488 <- get
                                                xx964_489 <- StateT char
                                                case xx964_489 of
                                                    '-' -> return ()
                                                    _ -> gets position >>= (throwError . mkParseError "'-'" "not match pattern: " "" d965_488 ["char"])
                                                let '-' = xx964_489
                                                return ()
                                                _ <- StateT spaces
                                                return ()
                                                e <- StateT hsExp1
                                                return (appE (varE $ mkName "negate") e)]
                hsExpTpl59_133 = foldl1 mplus [do e <- StateT hsExpLam
                                                  _ <- StateT spaces
                                                  return ()
                                                  d975_490 <- get
                                                  xx974_491 <- StateT char
                                                  let c = xx974_491
                                                  unless (isComma c) (gets position >>= (throwError . mkParseError "isComma c" "not match: " "" d975_490 ["char"]))
                                                  _ <- StateT spaces
                                                  return ()
                                                  et <- StateT hsExpTpl
                                                  return (cons e et),
                                               do e <- StateT hsExpLam
                                                  return (cons e emp),
                                               return emp]
                hsTypeArr60_134 = foldl1 mplus [do l <- StateT hsType
                                                   d985_492 <- get
                                                   xx984_493 <- StateT char
                                                   case xx984_493 of
                                                       '-' -> return ()
                                                       _ -> gets position >>= (throwError . mkParseError "'-'" "not match pattern: " "" d985_492 ["char"])
                                                   let '-' = xx984_493
                                                   return ()
                                                   d987_494 <- get
                                                   xx986_495 <- StateT char
                                                   let c = xx986_495
                                                   unless (isGt c) (gets position >>= (throwError . mkParseError "isGt c" "not match: " "" d987_494 ["char"]))
                                                   _ <- StateT spaces
                                                   return ()
                                                   r <- StateT hsTypeArr
                                                   return (appT (appT arrowT (getTyp l)) r),
                                                do t <- StateT hsType
                                                   return (getTyp t)]
                hsType61_135 = foldl1 mplus [do t <- StateT hsType1
                                                ts <- StateT hsType
                                                return (applyTyp (toTyp t) ts),
                                             do t <- StateT hsType1
                                                return (toTyp t)]
                hsType162_136 = foldl1 mplus [do d1001_496 <- get
                                                 xx1000_497 <- StateT char
                                                 case xx1000_497 of
                                                     '[' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'['" "not match pattern: " "" d1001_496 ["char"])
                                                 let '[' = xx1000_497
                                                 return ()
                                                 d1003_498 <- get
                                                 xx1002_499 <- StateT char
                                                 case xx1002_499 of
                                                     ']' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "']'" "not match pattern: " "" d1003_498 ["char"])
                                                 let ']' = xx1002_499
                                                 return ()
                                                 _ <- StateT spaces
                                                 return ()
                                                 return listT,
                                              do d1007_500 <- get
                                                 xx1006_501 <- StateT char
                                                 case xx1006_501 of
                                                     '[' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'['" "not match pattern: " "" d1007_500 ["char"])
                                                 let '[' = xx1006_501
                                                 return ()
                                                 t <- StateT hsTypeArr
                                                 d1011_502 <- get
                                                 xx1010_503 <- StateT char
                                                 case xx1010_503 of
                                                     ']' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "']'" "not match pattern: " "" d1011_502 ["char"])
                                                 let ']' = xx1010_503
                                                 return ()
                                                 _ <- StateT spaces
                                                 return ()
                                                 return (appT listT t),
                                              do d1015_504 <- get
                                                 xx1014_505 <- StateT char
                                                 case xx1014_505 of
                                                     '(' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'('" "not match pattern: " "" d1015_504 ["char"])
                                                 let '(' = xx1014_505
                                                 return ()
                                                 _ <- StateT spaces
                                                 return ()
                                                 tt <- StateT hsTypeTpl
                                                 d1021_506 <- get
                                                 xx1020_507 <- StateT char
                                                 case xx1020_507 of
                                                     ')' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "')'" "not match pattern: " "" d1021_506 ["char"])
                                                 let ')' = xx1020_507
                                                 return ()
                                                 return (tupT tt),
                                              do t <- StateT typToken
                                                 return (conT (mkName t)),
                                              do d1025_508 <- get
                                                 xx1024_509 <- StateT char
                                                 case xx1024_509 of
                                                     '(' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'('" "not match pattern: " "" d1025_508 ["char"])
                                                 let '(' = xx1024_509
                                                 return ()
                                                 d1027_510 <- get
                                                 xx1026_511 <- StateT char
                                                 case xx1026_511 of
                                                     '-' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'-'" "not match pattern: " "" d1027_510 ["char"])
                                                 let '-' = xx1026_511
                                                 return ()
                                                 d1029_512 <- get
                                                 xx1028_513 <- StateT char
                                                 let c = xx1028_513
                                                 unless (isGt c) (gets position >>= (throwError . mkParseError "isGt c" "not match: " "" d1029_512 ["char"]))
                                                 d1031_514 <- get
                                                 xx1030_515 <- StateT char
                                                 case xx1030_515 of
                                                     ')' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "')'" "not match pattern: " "" d1031_514 ["char"])
                                                 let ')' = xx1030_515
                                                 return ()
                                                 _ <- StateT spaces
                                                 return ()
                                                 return arrowT]
                hsTypeTpl63_137 = foldl1 mplus [do t <- StateT hsTypeArr
                                                   d1037_516 <- get
                                                   xx1036_517 <- StateT char
                                                   let c = xx1036_517
                                                   unless (isComma c) (gets position >>= (throwError . mkParseError "isComma c" "not match: " "" d1037_516 ["char"]))
                                                   _ <- StateT spaces
                                                   return ()
                                                   tt <- StateT hsTypeTpl
                                                   return (cons t tt),
                                                do t <- StateT hsTypeArr
                                                   return (cons t emp),
                                                return emp]
                typ64_138 = foldl1 mplus [do u <- StateT upper
                                             t <- StateT tvtail
                                             return (cons u t)]
                variable65_139 = foldl1 mplus [do l <- StateT lower
                                                  t <- StateT tvtail
                                                  return (cons l t)]
                tvtail66_140 = foldl1 mplus [do a <- StateT alpha
                                                t <- StateT tvtail
                                                return (cons a t),
                                             return emp]
                integer67_141 = foldl1 mplus [do dh <- StateT digit
                                                 ds <- list1_322 (foldl1 mplus [do d <- StateT digit
                                                                                   return d])
                                                 return (read (cons dh ds))]
                alpha68_142 = foldl1 mplus [do u <- StateT upper
                                               return u,
                                            do l <- StateT lower
                                               return l,
                                            do d <- StateT digit
                                               return d,
                                            do d1069_518 <- get
                                               xx1068_519 <- StateT char
                                               case xx1068_519 of
                                                   '\'' -> return ()
                                                   _ -> gets position >>= (throwError . mkParseError "'\\''" "not match pattern: " "" d1069_518 ["char"])
                                               let '\'' = xx1068_519
                                               return ()
                                               return '\'']
                upper69_143 = foldl1 mplus [do d1071_520 <- get
                                               xx1070_521 <- StateT char
                                               let u = xx1070_521
                                               unless (isUpper u) (gets position >>= (throwError . mkParseError "isUpper u" "not match: " "" d1071_520 ["char"]))
                                               return u]
                lower70_144 = foldl1 mplus [do d1073_522 <- get
                                               xx1072_523 <- StateT char
                                               let l = xx1072_523
                                               unless (isLowerU l) (gets position >>= (throwError . mkParseError "isLowerU l" "not match: " "" d1073_522 ["char"]))
                                               return l]
                digit71_145 = foldl1 mplus [do d1075_524 <- get
                                               xx1074_525 <- StateT char
                                               let d = xx1074_525
                                               unless (isDigit d) (gets position >>= (throwError . mkParseError "isDigit d" "not match: " "" d1075_524 ["char"]))
                                               return d]
                spaces72_146 = foldl1 mplus [do _ <- StateT space
                                                return ()
                                                _ <- StateT spaces
                                                return ()
                                                return (),
                                             return ()]
                space73_147 = foldl1 mplus [do d1081_526 <- get
                                               xx1080_527 <- StateT char
                                               let s = xx1080_527
                                               unless (isSpace s) (gets position >>= (throwError . mkParseError "isSpace s" "not match: " "" d1081_526 ["char"]))
                                               return (),
                                            do d1083_528 <- get
                                               xx1082_529 <- StateT char
                                               case xx1082_529 of
                                                   '-' -> return ()
                                                   _ -> gets position >>= (throwError . mkParseError "'-'" "not match pattern: " "" d1083_528 ["char"])
                                               let '-' = xx1082_529
                                               return ()
                                               d1085_530 <- get
                                               xx1084_531 <- StateT char
                                               case xx1084_531 of
                                                   '-' -> return ()
                                                   _ -> gets position >>= (throwError . mkParseError "'-'" "not match pattern: " "" d1085_530 ["char"])
                                               let '-' = xx1084_531
                                               return ()
                                               _ <- StateT notNLString
                                               return ()
                                               _ <- StateT newLine
                                               return ()
                                               return (),
                                            do _ <- StateT comment
                                               return ()
                                               return ()]
                notNLString74_148 = foldl1 mplus [do ddd1092_532 <- get
                                                     do err <- ((do _ <- StateT newLine
                                                                    return ()) >> return False) `catchError` const (return True)
                                                        unless err (gets position >>= (throwError . mkParseError ('!' : "_:newLine") "not match: " "" ddd1092_532 ["newLine"]))
                                                     put ddd1092_532
                                                     c <- StateT char
                                                     s <- StateT notNLString
                                                     return (cons c s),
                                                  return emp]
                newLine75_149 = foldl1 mplus [do d1100_533 <- get
                                                 xx1099_534 <- StateT char
                                                 case xx1099_534 of
                                                     '\n' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'\\n'" "not match pattern: " "" d1100_533 ["char"])
                                                 let '\n' = xx1099_534
                                                 return ()
                                                 return ()]
                comment76_150 = foldl1 mplus [do d1102_535 <- get
                                                 xx1101_536 <- StateT char
                                                 case xx1101_536 of
                                                     '{' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'{'" "not match pattern: " "" d1102_535 ["char"])
                                                 let '{' = xx1101_536
                                                 return ()
                                                 d1104_537 <- get
                                                 xx1103_538 <- StateT char
                                                 case xx1103_538 of
                                                     '-' -> return ()
                                                     _ -> gets position >>= (throwError . mkParseError "'-'" "not match pattern: " "" d1104_537 ["char"])
                                                 let '-' = xx1103_538
                                                 return ()
                                                 ddd1105_539 <- get
                                                 do err <- ((do d1107_540 <- get
                                                                xx1106_541 <- StateT char
                                                                case xx1106_541 of
                                                                    '#' -> return ()
                                                                    _ -> gets position >>= (throwError . mkParseError "'#'" "not match pattern: " "" d1107_540 ["char"])
                                                                let '#' = xx1106_541
                                                                return ()) >> return False) `catchError` const (return True)
                                                    unless err (gets position >>= (throwError . mkParseError ('!' : "'#':") "not match: " "" ddd1105_539 ["char"]))
                                                 put ddd1105_539
                                                 _ <- StateT comments
                                                 return ()
                                                 _ <- StateT comEnd
                                                 return ()
                                                 return ()]
                comments77_151 = foldl1 mplus [do _ <- StateT notComStr
                                                  return ()
                                                  _ <- StateT comment
                                                  return ()
                                                  _ <- StateT comments
                                                  return ()
                                                  return (),
                                               do _ <- StateT notComStr
                                                  return ()
                                                  return ()]
                notComStr78_152 = foldl1 mplus [do ddd1120_542 <- get
                                                   do err <- ((do _ <- StateT comment
                                                                  return ()) >> return False) `catchError` const (return True)
                                                      unless err (gets position >>= (throwError . mkParseError ('!' : "_:comment") "not match: " "" ddd1120_542 ["comment"]))
                                                   put ddd1120_542
                                                   ddd1123_543 <- get
                                                   do err <- ((do _ <- StateT comEnd
                                                                  return ()) >> return False) `catchError` const (return True)
                                                      unless err (gets position >>= (throwError . mkParseError ('!' : "_:comEnd") "not match: " "" ddd1123_543 ["comEnd"]))
                                                   put ddd1123_543
                                                   _ <- StateT char
                                                   return ()
                                                   _ <- StateT notComStr
                                                   return ()
                                                   return (),
                                                return ()]
                comEnd79_153 = foldl1 mplus [do d1131_544 <- get
                                                xx1130_545 <- StateT char
                                                case xx1130_545 of
                                                    '-' -> return ()
                                                    _ -> gets position >>= (throwError . mkParseError "'-'" "not match pattern: " "" d1131_544 ["char"])
                                                let '-' = xx1130_545
                                                return ()
                                                d1133_546 <- get
                                                xx1132_547 <- StateT char
                                                case xx1132_547 of
                                                    '}' -> return ()
                                                    _ -> gets position >>= (throwError . mkParseError "'}'" "not match pattern: " "" d1133_546 ["char"])
                                                let '}' = xx1132_547
                                                return ()
                                                return ()]
                list1_322 :: forall m a . (MonadPlus m, Applicative m) =>
                                          m a -> m ([a])
                list12_416 :: forall m a . (MonadPlus m, Applicative m) =>
                                           m a -> m ([a])
                list1_322 p = list12_416 p `mplus` return []
                list12_416 p = ((:) <$> p) <*> list1_322 p
                optional3_325 :: forall m a . (MonadPlus m, Applicative m) =>
                                              m a -> m (Maybe a)
                optional3_325 p = (Just <$> p) `mplus` return Nothing