module HsExpStruct where
import SrcLoc
import HsIdent
import HsLiteral
import HsGuardsStruct
import HsAssoc
--import HsModule
-------- Expressions --------------------------------------------------------
data EI i e p ds t c
= HsId (HsIdentI i) -- collapsing HsVar and HsCon
| HsLit HsLiteral
| HsInfixApp e (HsIdentI i) e
| HsApp e e
| HsNegApp e
| HsLambda [p] e
| HsLet ds e
| HsIf e e e
| HsCase e [HsAlt e p ds]
| HsDo (HsStmt e p ds)
| HsTuple [e]
| HsList [e]
| HsParen e
| HsLeftSection e (HsIdentI i)
| HsRightSection (HsIdentI i) e
| HsRecConstr i [HsFieldUpdateI i e] -- qcon { fbind1, ..., fbindn }
| HsRecUpdate e [HsFieldUpdateI i e] -- exp_<qcon> { fbind1, ..., fbindn }
| HsEnumFrom e
| HsEnumFromTo e e
| HsEnumFromThen e e
| HsEnumFromThenTo e e e
| HsListComp (HsStmt e p ds)
| HsExpTypeSig SrcLoc e c t
| HsAsPat i e -- pattern only
| HsWildCard -- ditto
| HsIrrPat e -- ditto
deriving (Eq, Show)
data HsStmt e p ds
= HsGenerator p e (HsStmt e p ds)
| HsQualifier e (HsStmt e p ds)
| HsLetStmt ds (HsStmt e p ds)
| HsLast e
deriving (Eq, Show)
data HsStmtAtom e p ds
= HsGeneratorAtom p e
| HsQualifierAtom e
| HsLetStmtAtom ds
| HsLastAtom e
deriving (Eq, Show)
data HsFieldUpdateI i e
= HsFieldBind i -- This doesn't seem to match anything in the
-- Report; selection is represented by
-- qvar exp_<qcon>
-- where qcon has a field named qvar.
| HsFieldUpdate i e -- qvar = exp
deriving (Eq, Show)