2 module Parser ( parse ) where
14 '%module' { TKmodule }
16 '%newtype' { TKnewtype }
17 '%forall' { TKforall }
23 '%coerce' { TKcoerce }
25 '%external' { TKexternal }
43 INTEGER { TKinteger $$ }
44 RATIONAL { TKrational $$ }
45 STRING { TKstring $$ }
48 %monad { P } { thenP } { returnP }
49 %lexer { lexer } { TKEOF }
54 : '%module' mname tdefs vdefgs
59 | tdef ';' tdefs {$1:$3}
62 : '%data' qcname tbinds '=' '{' cons1 '}'
64 | '%newtype' qcname tbinds trep
68 : {- empty -} {Nothing}
72 : name { ($1,Klifted) }
73 | '(' name '::' akind ')'
78 | tbind tbinds { $1:$2 }
82 : '(' name '::' ty')' { ($2,$4) }
86 | vbind vbinds { $1:$2 }
94 | bind binds1 { $1:$2 }
96 attbinds :: { [Tbind] }
105 | '(' kind ')' { $2 }
114 | con ';' cons1 { $1:$3 }
117 : qcname attbinds atys
132 | bty aty { Tapp $1 $2 }
138 | '%forall' tbinds '.' ty
139 { foldr Tforall $4 $2 }
141 vdefgs :: { [Vdefg] }
143 | vdefg ';' vdefgs {$1:$3 }
146 : '%rec' '{' vdefs1 '}'
152 | vdef ';' vdefs1 { $1:$3 }
155 : qname '::' ty '=' exp
165 : fexp aexp { App $1 $2 }
166 | fexp '@' aty { Appt $1 $3 }
171 | '\\' binds1 '->' exp
173 | '%let' vdefg '%in' exp
175 | '%case' aexp '%of' vbind '{' alts1 '}'
181 | '%external' STRING aty
186 | alt ';' alts1 { $1:$3 }
189 : qcname attbinds vbinds '->' exp
197 : '(' INTEGER '::' aty ')'
199 | '(' RATIONAL '::' aty ')'
201 | '(' CHAR '::' aty ')'
203 | '(' STRING '::' aty ')'
220 qcname :: { (Id,Id) }
228 happyError s l = failP (show l ++ ": Parse error\n") (take 100 s) l