The AST signature


Synopsis

signature AST
structure Compiler.Ast : AST

Interface

type fixity
type symbol
val infixleft : int -> fixity
val infixright : int -> fixity
type literal = IntInf.int
type srcpos
type region
type path
type 'a fixitem
datatype 'a sigConst
  = NoSig
  | Transparent of 'a
  | Opaque of 'a
datatype exp
  = VarExp of path
  | FnExp of rule list
  | FlatAppExp of exp fixitem list
  | AppExp of {function : exp, argument : exp}
  | CaseExp of {expr : exp, rules : rule list}
  | LetExp of {dec : dec, expr : exp}
  | SeqExp of exp list
  | IntExp of literal
  | WordExp of literal
  | RealExp of string
  | StringExp of string
  | CharExp of string
  | RecordExp of (symbol * exp) list
  | ListExp of exp list
  | TupleExp of exp list
  | SelectorExp of symbol
  | ConstraintExp of {expr : exp, constraint : ty}
  | HandleExp of {expr : exp, rules : rule list}
  | RaiseExp of exp
  | IfExp of {test : exp, thenCase : exp, elseCase : exp}
  | AndalsoExp of (exp * exp)
  | OrelseExp of (exp * exp)
  | VectorExp of exp list
  | WhileExp of {test : exp, expr : exp}
  | MarkExp of (exp * region)
datatype rule
  = Rule of {pat : pat, exp : exp}
datatype pat
  = WildPat
  | VarPat of path
  | IntPat of literal
  | WordPat of literal
  | StringPat of string
  | CharPat of string
  | RecordPat of {def : (symbol * pat) list, flexibility : bool}
  | ListPat of pat list
  | TuplePat of pat list
  | FlatAppPat of pat fixitem list
  | AppPat of {constr : pat, argument : pat}
  | ConstraintPat of {pattern : pat, constraint : ty}
  | LayeredPat of {varPat : pat, expPat : pat}
  | VectorPat of pat list
  | MarkPat of (pat * region)
  | OrPat of pat list
datatype strexp
  = VarStr of path
  | StructStr of dec
  | ConstrainedStr of (strexp * sigexp sigConst)
  | AppStr of (path * (strexp * bool) list)
  | LetStr of (dec * strexp)
  | MarkStr of (strexp * region)
datatype fctexp
  = VarFct of (path * fsigexp sigConst)
  | FctFct of {params : (symbol option * sigexp) list, body : strexp, constraint : sigexp sigConst}
  | LetFct of (dec * fctexp)
  | AppFct of (path * (strexp * bool) list * fsigexp sigConst)
  | MarkFct of (fctexp * region)
datatype wherespec
  = WhType of (symbol list * tyvar list * ty)
  | WhStruct of (symbol list * symbol list)
datatype sigexp
  = VarSig of symbol
  | AugSig of (sigexp * wherespec list)
  | SigSig of spec list
  | MarkSig of (sigexp * region)
datatype fsigexp
  = VarFsig of symbol
  | FsigFsig of {param : (symbol option * sigexp) list, def : sigexp}
  | MarkFsig of (fsigexp * region)
datatype spec
  = StrSpec of (symbol * sigexp option * path option) list
  | TycSpec of ((symbol * tyvar list * ty option) list * bool)
  | FctSpec of (symbol * fsigexp) list
  | ValSpec of (symbol * ty) list
  | DataSpec of {datatycs : db list, withtycs : tb list}
  | ExceSpec of (symbol * ty option) list
  | FixSpec of {fixity : fixity, ops : symbol list}
  | ShareStrSpec of path list
  | ShareTycSpec of path list
  | IncludeSpec of sigexp
  | MarkSpec of (spec * region)
datatype dec
  = ValDec of (vb list * tyvar list)
  | ValrecDec of (rvb list * tyvar list)
  | FunDec of (fb list * tyvar list)
  | TypeDec of tb list
  | DatatypeDec of {datatycs : db list, withtycs : tb list}
  | AbstypeDec of {abstycs : db list, withtycs : tb list, body : dec}
  | ExceptionDec of eb list
  | StrDec of strb list
  | AbsDec of strb list
  | FctDec of fctb list
  | SigDec of sigb list
  | FsigDec of fsigb list
  | LocalDec of (dec * dec)
  | SeqDec of dec list
  | OpenDec of path list
  | OvldDec of (symbol * ty * exp list)
  | FixDec of {fixity : fixity, ops : symbol list}
  | ImportDec of string list
  | MarkDec of (dec * region)
datatype vb
  = Vb of {pat : pat, exp : exp}
  | LVb of {pat : pat, exp : exp}
  | MarkVb of (vb * region)
datatype rvb
  = Rvb of {var : symbol, fixity : (symbol * region) option, exp : exp, resultty : ty option}
  | LRvb of {var : symbol, fixity : (symbol * region) option, exp : exp, resultty : ty option}
  | MarkRvb of (rvb * region)
datatype fb
  = Fb of clause list
  | LFb of clause list
  | MarkFb of (fb * region)
datatype clause
  = Clause of {pats : pat fixitem list, resultty : ty option, exp : exp}
datatype tb
  = Tb of {tyc : symbol, def : ty, tyvars : tyvar list}
  | MarkTb of (tb * region)
datatype db
  = Db of {tyc : symbol, tyvars : tyvar list, rhs : dbrhs}
  | LDb of {tyc : symbol, tyvars : tyvar list, rhs : dbrhs}
  | MarkDb of (db * region)
datatype dbrhs
  = Constrs of (symbol * ty option) list
  | Repl of symbol list
datatype eb
  = EbGen of {exn : symbol, etype : ty option}
  | EbDef of {exn : symbol, edef : path}
  | MarkEb of (eb * region)
datatype strb
  = Strb of {name : symbol, def : strexp, constraint : sigexp sigConst}
  | MarkStrb of (strb * region)
datatype fctb
  = Fctb of {name : symbol, def : fctexp}
  | MarkFctb of (fctb * region)
datatype sigb
  = Sigb of {name : symbol, def : sigexp}
  | MarkSigb of (sigb * region)
datatype fsigb
  = Fsigb of {name : symbol, def : fsigexp}
  | MarkFsigb of (fsigb * region)
datatype tyvar
  = Tyv of symbol
  | MarkTyv of (tyvar * region)
datatype ty
  = VarTy of tyvar
  | ConTy of (symbol list * ty list)
  | RecordTy of (symbol * ty) list
  | TupleTy of ty list
  | MarkTy of (ty * region)

Description

type fixity

type symbol

val infixleft

val infixright

type literal

type srcpos

type region

type path

type 'a fixitem

datatype 'a sigConst

datatype exp
datatype rule
datatype pat
datatype strexp
datatype fctexp
datatype wherespec
datatype sigexp
datatype fsigexp
datatype spec
datatype dec
datatype vb
datatype rvb
datatype fb
datatype clause
datatype tb
datatype db
datatype dbrhs
datatype eb
datatype strb
datatype fctb
datatype sigb
datatype fsigb
datatype tyvar
datatype ty