strictness, ci
[minfp.git] / ast.icl
1 implementation module ast
2
3 import StdEnv
4 import Data.Either
5 import Text
6 import int
7
8 instance toString Function where
9 toString (Function i a e) = concat [toString i, " ", join " " (map toString a), " = ", toString e]
10
11 instance toString Expression where
12 toString (Lit v) = toString v
13 toString (Var s) = toString s
14 toString (App l r) = concat ["(", toString l, " ", toString r, ")"]
15 toString (Lambda a e) = concat ["(\\", toString a, ". ", toString e, ")"]
16 toString (Let ns r) = concat
17 [ "let ", concat [concat ["\t", toString n, " = ", toString v, "\n"]\\(n, v)<-ns]
18 , "in\n", toString r]
19 toString _ = abort "toString Expression not implemented"
20
21 instance toString Value where
22 toString (Int i) = toString i
23 toString (Bool b) = toString b
24 toString (Lambda` v a) = toString (Lambda v a)
25 toString (Builtin a) = "builtin"
26
27 instance toString Type where
28 toString (TVar a) = toString a
29 toString TInt = "Int"
30 toString TBool = "Bool"
31 toString (TApp a b) = concat ["(", toString a, " ", toString b, ")"]
32 toString (a --> b) = concat ["(", toString a, " -> ", toString b, ")"]
33
34 instance toString TypeDef where
35 toString (TypeDef name args def) = join " " ["::",toString name:map toString args]
36 +++ " = " +++ join " | " [join " " [toString c:map toString d]\\(c, d)<-def]