X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/095de39e1be653dcb6438d19c719bd7797e0772a..1cbe917465857acd366e4058d1f71c5653720b17:/src/ast.sml diff --git a/src/ast.sml b/src/ast.sml index 29d7cb2..0e8688d 100644 --- a/src/ast.sml +++ b/src/ast.sml @@ -59,7 +59,7 @@ datatype typ' = | TUnif of string * typ option ref (* Unification variable to be determined during type-checking *) withtype typ = typ' * position - and record = typ StringMap.map + and record = (typ' * position) StringMap.map datatype exp' = EInt of int @@ -89,6 +89,8 @@ datatype exp' = * action are abandoned *) | EWith of exp * exp (* Apply a TNested to an action *) + | EALam of string * pred * exp + (* Abstraction for building TNested values *) withtype exp = exp' * position datatype decl' = @@ -100,4 +102,20 @@ type decl = decl' * string option * position type file = string option * decl list * exp option +fun multiApp (f, loc, args) = + foldl (fn (arg, e) => (EApp (e, arg), loc)) f args + +datatype unification_error = + UnifyPred of pred * pred + | UnifyTyp of typ * typ + | UnifyOccurs of string * typ + +exception Unify of unification_error + +datatype type_error = + WrongType of string * exp * typ * typ * unification_error option + | WrongForm of string * string * exp * typ * unification_error option + | UnboundVariable of string + | WrongPred of string * pred * pred + end