moduleFlite.SyntaxwheretypeProg=[Decl]dataDecl=Func{funcName::Id,funcArgs::[Pat],funcRhs::Exp}typeId=StringdataExp=AppExp[Exp]|CaseExp[Alt]|Let[Binding]Exp|VarId|ConId|FunId|IntInt-- The following may be introduced by various transformations,-- but not by the parser.|Bottom|Alts[Id]Int|CtrIdIntInt|Lam[Id]Exp-- For speculative evaluation of primitive redexes.|PrimAppId[Exp]|PrimIdderivingEqtypePat=ExptypeAlt=(Pat,Exp)typeBinding=(Id,Exp)typeApp=[Exp]-- Primitive functionsisPrimId::Id->BoolisPrimIdp=isBinaryPrimp||isUnaryPrimpisBinaryPrim::Id->BoolisBinaryPrim"(+)"=TrueisBinaryPrim"(-)"=TrueisBinaryPrim"(==)"=TrueisBinaryPrim"(/=)"=TrueisBinaryPrim"(<=)"=TrueisBinaryPrim_=FalseisUnaryPrim::Id->BoolisUnaryPrim"emit"=TrueisUnaryPrim"emitInt"=TrueisUnaryPrim_=FalseisPredexId::Id->BoolisPredexId=isBinaryPrim