module AbsHao where

-- Haskell module generated by the BNF converter

newtype Ident = Ident String deriving (Eq,Ord,Show)
newtype Infix = Infix String deriving (Eq,Ord,Show)
data Module =
   Module [Ident] [Export] Term
  deriving (Eq,Ord,Show)

data Export =
   Export Symbol
  deriving (Eq,Ord,Show)

data QIdent =
   FQIdent [Ident] Ident
  deriving (Eq,Ord,Show)

data QInfix =
   FQInfix [Ident] Infix
  deriving (Eq,Ord,Show)

data Symbol =
   IdSym QIdent
 | OpSym Op
  deriving (Eq,Ord,Show)

data Op =
   InfOp QInfix
 | IdOp Symbol
  deriving (Eq,Ord,Show)

data Term =
   Seq Term Term
 | Binding Term Term
 | OpApp Term Op Term
 | App Term Term
 | Var Symbol
 | Form [Case]
 | Block Term
 | Tuple [Term]
 | OpDecl Op Assoc [Fixity]
  deriving (Eq,Ord,Show)

data Case =
   PatCase Term [Guard]
  deriving (Eq,Ord,Show)

data Guard =
   NormGuard Term Term
 | DefaultGuard Term
  deriving (Eq,Ord,Show)

data Assoc =
   LeftAssoc
 | RightAssoc
 | NoAssoc
  deriving (Eq,Ord,Show)

data Fixity =
   GtFixity [Op]
 | LtFixity [Op]
  deriving (Eq,Ord,Show)


