definition module SaplStruct import StdString, StdOverloaded import SaplTokenizer import Maybe /** * Possible function types and language constructs. */ :: FuncType = FTRecord SaplVar [SaplVar] | FTADT SaplVar [SaplConstructor] | FTCAF SaplVar SaplTerm | FTMacro SaplVar SaplTerm [SaplVar] | FTFunc SaplVar SaplTerm [SaplVar] :: SaplConstructor = SaplConstructor SaplVar Int [SaplVar] :: SaplTerm = SLit Literal | SVar SaplVar | SApplication SaplVar [SaplTerm] | SIf SaplTerm SaplTerm SaplTerm | SSelect SaplTerm [(SaplPattern, SaplTerm)] | SLet SaplTerm [SaplLetDef] | SAbortBody :: SaplLetDef = SaplLetDef SaplVar SaplTerm :: SaplVar = NormalVar String Int | StrictVar String Int :: SaplPattern = PCons String [SaplVar] | PLit Literal | PDefault instance toString SaplVar // I don't provide instances of (==) and (<) here because multiple good way can be imagined... eqVarByName :: !SaplVar !SaplVar -> Bool ltVarByName :: !SaplVar !SaplVar -> Bool eqVarByNameLevel :: !SaplVar !SaplVar -> Bool ltVarByNameLevel :: !SaplVar !SaplVar -> Bool eqStrictVar :: !String !SaplVar -> Bool isStrictVar :: !SaplVar -> Bool toNormalVar :: !SaplVar -> SaplVar toStrictVar :: !SaplVar -> SaplVar unpackVar :: !SaplVar -> String unpackBindVar :: !SaplLetDef -> SaplVar unpackConsName :: !SaplPattern -> Maybe String toStrictBind :: !SaplLetDef -> SaplLetDef isConsPattern :: !SaplPattern -> Bool isDefaultPattern :: !SaplPattern -> Bool