more
[minfp.git] / ast.icl
1 implementation module ast
2
3 import StdEnv
4 import Text
5
6 instance toString AST where
7 toString (AST f) = join "\n" (map toString f)
8
9 instance toString Function where
10 toString (Function i a e) = concat [toString i, " ", join " " (map toString a), " = ", toString e]
11
12 instance toString Expression where
13 toString (Lit v) = toString v
14 toString (Var s) = toString s
15 toString (App l r) = "(" +++ toString l +++ " " +++ toString r +++ ")"
16 toString (Lambda a e) = "(\\" +++ toString a +++ "." +++ toString e +++ ")"
17 toString (Builtin v as) = "'" +++ toString v +++ "'" +++ join " " (map toString as)
18 toString _ = abort "toString Expression not implemented"
19
20 instance toString Value where
21 toString (Int i) = toString i
22 toString (Bool b) = toString b
23 toString (Char b) = "'" +++ toString b +++ "'"
24 toString (Func a as _) = "Function arity " +++ toString a +++ " curried " +++ join "," (map toString as)
25
26 instance toString Type where
27 toString (TVar a) = toString a
28 toString TInt = "Int"
29 toString TBool = "Bool"
30 toString TChar = "Char"
31 toString (TFun a b) = "(" +++ toString a +++ ") ->" +++ toString b