Add structured types for parsing and type checking
[minfp.git] / ast.icl
diff --git a/ast.icl b/ast.icl
index 2c6c306..20d2ca3 100644 (file)
--- a/ast.icl
+++ b/ast.icl
@@ -13,7 +13,6 @@ instance toString Expression where
        toString (Var s) = toString s
        toString (App l r) = concat ["(", toString l, " ", toString r, ")"]
        toString (Lambda a e) = concat ["(\\", toString a, ". ", toString e, ")"]
-       toString (Tuple a b) = concat ["(", toString a, ", ", toString b, ")"]
        toString (Let ns r) = concat
                [ "let ", concat [concat ["\t", toString n, " = ", toString v, "\n"]\\(n, v)<-ns]
                , "in\n", toString r]
@@ -22,16 +21,16 @@ instance toString Expression where
 instance toString Value where
        toString (Int i) = toString i
        toString (Bool b) = toString b
-       toString (a ** b) = toString (Tuple a b)
        toString (Lambda` v a) = toString (Lambda v a)
        toString (Builtin a) = "builtin"
 
 instance toString Type where
        toString (TVar a) = toString a
-       toString (TTuple a b) = concat ["(", toString a, ",", toString b, ")"]
        toString TInt = "Int"
        toString TBool = "Bool"
+       toString (TApp a b) = concat ["(", toString a, " ", toString b, ")"]
        toString (a --> b) = concat ["(", toString a, " -> ", toString b, ")"]
 
 instance toString TypeDef where
-       toString (TypeDef name args def) = ""
+       toString (TypeDef name args def) = join " " ["::",toString name:map toString args]
+               +++ " = " +++ join " | " [join " " [toString c:map toString d]\\(c, d)<-def]