X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/a49a9bfbe03214c68d029fe856a56006267bc8a3..06bd821502f57dcb4ef89295b221fc2b9a4f1ae3:/src/ast.sml diff --git a/src/ast.sml b/src/ast.sml index ba00f78..d4c5727 100644 --- a/src/ast.sml +++ b/src/ast.sml @@ -1,5 +1,5 @@ (* HCoop Domtool (http://hcoop.sourceforge.net/) - * Copyright (c) 2006, Adam Chlipala + * Copyright (c) 2006-2007, Adam Chlipala * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -80,7 +80,7 @@ datatype exp' = (* Do-nothing action *) | ESet of string * exp (* Set an environment variable *) - | EGet of string * string * exp + | EGet of string * typ option * string * exp (* Get an environment variable *) | ESeq of exp list (* Monad sequencer; execute a number of commands in order *) @@ -91,6 +91,8 @@ datatype exp' = (* Apply a TNested to an action *) | EALam of string * pred * exp (* Abstraction for building TNested values *) + | EIf of exp * exp * exp + (* If..then..else *) withtype exp = exp' * position datatype decl' = @@ -105,4 +107,17 @@ 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