HaRe-0.6: tools/interp/NewData.hs
type Name = String
data Op = Plus | Mult | IntEq | IntLess
data LS = Lazy | Strict
-- M Value
data E
= Var Name
| App E E
| Abs P E
| Let [D] E
| Case E [(P,Body,[D])]
| PairExp E E
| TupleExp [E]
| Const Integer
| ConApp Name [E] -- ConApp Name [(E,Bool)]
| NewApp Name E
| Boom
| Undefined
--- Above is the "core", below various extras
| Bin Op E E
| Cond E E E
| Tconst
| Fconst
-- M(Maybe Value)
data Body = Guarded [(E,E)]
| Normal E
-- M Value -> M(Maybe EnvFrag)
data P = Pconst Integer
| Pvar Name
| Ppair P P
| Ptuple [P]
| Pcondata Name [P]
| Pnewdata Name P
| Ptilde P
-- M Value -> M Value OR EnvFrag
data D =
Fun Name [([P],Body,[D])] -- each item in the list M Value -> M(Maybe Value)
| Val P Body [D] -- EnvFrag