@@ -21,4 +21,86 @@ infixl 9 .;
2121(.) : (b -> c) -> (a -> b) -> a -> c;
2222(.) f g x = f (g x);
2323
24+data Bool = False | True;
25+
26+boolElim : (x:Bool) -> a -> a -> a;
27+boolElim True t e = t;
28+boolElim False t e = e;
29+
30+syntax if [test] then [t] else [e] = boolElim test t e;
31+
32+infixl 5 ==, /=, ==.;
33+infixl 6 <, <=, >, >=, <., <=., >., >=.;
34+infixl 7 <<, >>;
35+infixl 8 +,-,++,+.,-.;
36+infixl 9 *,/,*.,/.;
37+
38+--- Numeric operators
39+
40+intToBool : Int -> Bool;
41+intToBool 0 = False;
42+intToBool x = True;
43+
44+boolOp : (a -> a -> Int) -> a -> a -> Bool;
45+boolOp op x y = intToBool (op x y);
46+
47+(+) : Int -> Int -> Int;
48+(+) = prim__addInt;
49+
50+(-) : Int -> Int -> Int;
51+(-) = prim__subInt;
52+
53+(*) : Int -> Int -> Int;
54+(*) = prim__mulInt;
55+
56+div : Int -> Int -> Int;
57+div = prim__divInt;
58+
59+(==) : Int -> Int -> Bool;
60+(==) = boolOp prim__eqInt;
61+
62+(<) : Int -> Int -> Bool;
63+(<) = boolOp prim__ltInt;
64+
65+(<=) : Int -> Int -> Bool;
66+(<=) = boolOp prim__lteInt;
67+
68+(>) : Int -> Int -> Bool;
69+(>) = boolOp prim__gtInt;
70+
71+(>=) : Int -> Int -> Bool;
72+(>=) = boolOp prim__gteInt;
73+
74+(+.) : Float -> Float -> Float;
75+(+.) = prim__addFloat;
76+
77+(-.) : Float -> Float -> Float;
78+(-.) = prim__subFloat;
79+
80+(*.) : Float -> Float -> Float;
81+(*.) = prim__mulFloat;
82+
83+(/.) : Float -> Float -> Float;
84+(/.) = prim__divFloat;
85+
86+(==.) : Float -> Float -> Bool;
87+(==.) = boolOp prim__eqFloat;
88+
89+(<.) : Float -> Float -> Bool;
90+(<.) = boolOp prim__ltFloat;
91+
92+(<=.) : Float -> Float -> Bool;
93+(<=.) = boolOp prim__lteFloat;
94+
95+(>.) : Float -> Float -> Bool;
96+(>.) = boolOp prim__gtFloat;
97+
98+(>=.) : Float -> Float -> Bool;
99+(>=.) = boolOp prim__gteFloat;
100+
101+--- string operators
102+
103+(++) : String -> String -> String;
104+(++) = prim__concat;
105+
24106