many changes
[clean-tests.git] / constraint / test.icl
1 module test
2
3 import StdEnv
4
5 class expr v c
6 where
7 lit :: a -> v (c a)
8
9 //class plus v c
10 //where
11 // (+.) infixl 6 :: (v c a) (v c a) -> v c a | + a
12
13 :: BM x y = { to :: x -> y, fro :: y -> x }
14 bm :: BM a a
15 bm = {to=id, fro=id}
16
17 :: ToString a = E.e: ToString (BM a e) & toString e
18
19 :: Printer a = P a ([String] -> [String])
20 :: PrintConstraints a = E.e: PC (BM a e) & toString e
21
22 print :: (Printer (PrintConstraints a)) -> [String]
23 print (P _ a) = a []
24
25 instance expr Printer PrintConstraints
26 where
27 lit a = P (PC bm) \c->[toString (bm.to a):c]
28 //instance plus Printer PrintConstraints
29 //where
30 // (+.) (P l) (P r) = P \c->["(":l ["+":r [")":c]]]
31
32 //:: Eval c a = E a | EBlurp (c a)
33 //:: EvalConstraints a = EC a
34 //eval :: (Eval EvalConstraints a) -> a
35 //eval (E a) = a
36 //
37 //instance expr Eval EvalConstraints
38 //where
39 // lit a = E a
40 //instance plus Eval PrintConstraints
41 //where
42 // (+.) (E l) (E r) = E (l + r)
43
44 Start = print t
45 where
46 t = lit 42