pec-0.2.0: Pds.grm
data Module
| Module "module" uident "{" ExportDList ImportDList TypeDList InstDList VarDList "}"
data ExportD
| TypeEx "export" uident
| VarEx "export" lident
data ImportD | ImportD "import" uident AsSpec
data AsSpec
| AsAS "as" uident
| EmptyAS
data TypeD | TypeD "type" uident VarList "=" TyDecl
data VarD | VarD lident DeclSym Exp
data InstD | InstD "instance" uident Type
data DeclSym
| Macro "=>"
| Define "="
data TyDecl
| TyRecord "record" "{" FieldTList "}"
| TyTagged "tagged" ConCList
| TyEnum "enum" EnumCList
| TySyn "synonym" Type
| TyNewtype "newtype" uident Type
| TyUnit "unit" uident
data Exp
| LetE "let" lident DeclSym Exp "in" Exp
| LamE "\\" lident "->" Exp
| SwitchE "switch" Exp "of" Default "{" SwitchAltList "}"
| AppE "(" Exp Exp ")"
| AscribeE "(" Exp "::" Type ")"
| VarE lident
| LitE Lit
data Default
| DefaultNone
| DefaultSome Exp
data Lit
| CharL char
| StringL string
| NmbrL number
data Type
| TyCxt "{" CxtList "}" "=>" Type
| TyFun "(" Type "->" Type ")"
| TyVoid "VoidT"
| TyConstr "(" uident TypeList ")"
| TyVarT lident
data SwitchAlt | SwitchAlt Exp "->" Exp
data Cxt | Cxt uident VarList
data ConC | ConC uident Type
data EnumC | EnumC uident
data FieldT | FieldT uident "::" Type
data Var | Var lident
list ExportDList ExportD empty terminator ";" vert
list ImportDList ImportD empty terminator ";" vert
list VarDList VarD empty terminator ";" vert
list TypeDList TypeD empty terminator ";" vert
list InstDList InstD empty terminator ";" vert
list SwitchAltList SwitchAlt empty terminator ";" vert
list EnumCList EnumC nonempty separator "|" horiz
list ConCList ConC nonempty separator "|" horiz
list FieldTList FieldT nonempty separator "," horiz
list VarList Var empty separator "" horiz
list TypeList Type empty separator "" horiz
list CxtList Cxt nonempty separator "," horiz