ushalow
[clean-tests.git] / rank2 / test.icl
1 module test
2
3 import StdEnv
4
5 class arith v
6 where
7 lit :: a -> v a | toString a
8 plus :: (v a) (v a) -> v a | + a
9
10 class rtrn v :: (v a) -> v (TaskValue a)
11
12 :: Print a = P String
13 unPrint :: (Print a) -> String
14 unPrint (P a) = a
15
16 :: Eval a = E a
17 unEval :: (Eval a) -> a
18 unEval (E a) = a
19
20 :: TaskValue a = NoValue | Value a Bool
21
22 instance arith Print
23 where
24 lit a = P (toString a)
25 plus (P a) (P b) = P (a +++ "+" +++ b)
26
27 instance arith Eval
28 where
29 lit a = E a
30 plus (E a) (E b) = E (a + b)
31
32 instance rtrn Print where rtrn (P a) = P ("Task (" +++ a +++ ")")
33 instance rtrn Eval where rtrn (E a) = E (Value a True)
34
35 class default a :: a
36 instance default Int where default = 42
37 instance default (TaskValue a) where default = NoValue
38
39 listItem ::
40 (A.v: a -> v (TaskValue b) | rtrn, arith v)
41 -> (String, b)
42 | +, toString, default b & default a
43 listItem mtask =
44 ( unPrint (mtask default)
45 , default //unEval (mtask default)
46 )
47
48 Start :: (String, Int)
49 Start = listItem \i->rtrn (lit i)