.
[clean-tests.git] / rank2 / test.icl
index da53852..fb00656 100644 (file)
@@ -1,49 +1,54 @@
 module test
 
 import StdEnv
+import Data.Maybe
+import Data.Functor
+import Control.Applicative
 
-class arith v
-where
-       lit :: a -> v a | toString a
-       plus :: (v a) (v a) -> v a | + a
+class expr v where
+       lit :: i -> v i | toString i
+       (+.) infixl 6 :: (v i) (v i) -> v i | + i
 
-class rtrn v :: (v a) -> v (TaskValue a)
+instance + (v a) | expr v & + a where
+       + l r = l +. r
 
-:: Print a = P String
-unPrint :: (Print a) -> String
-unPrint (P a) = a
+eval :: (Maybe a) -> Maybe a
+eval x = x
+instance expr Maybe where
+       lit i = Just i
+       +. x y = (+) <$> x <*> y
 
-:: Eval a = E a
-unEval :: (Eval a) -> a
-unEval (E a) = a
+:: Print a =: Print String
+print :: (Print a) -> String
+print (Print a) = a
+instance expr Print where
+       lit i = Print (toString i)
+       +. (Print l) (Print r) = Print (l +++ "+" +++ r)
 
-:: TaskValue a = NoValue | Value a Bool
+//printEval :: (A.v: v a | expr v & + (v Int)) -> (Maybe a, String)
+//printEval :: (A.v: v a | expr v & + (v Int)) -> (Maybe a, String)
+//printEval f = (eval f, print f)
 
-instance arith Print
-where
-       lit a = P (toString a)
-       plus (P a) (P b) = P (a +++ "+" +++ b)
+printEval` :: (v a) (w a) -> (Maybe a, String) | expr v & expr w
+printEval` f1 f2 = (eval f1, print f2)
 
-instance arith Eval
-where
-       lit a = E a
-       plus (E a) (E b) = E (a + b)
+printEval f :== printEval` f f
 
-instance rtrn Print where rtrn (P a) = P ("Task (" +++ a +++ ")")
-instance rtrn Eval where rtrn (E a) = E (Value a True)
+//x = lit 4 + lit 28
+//y = lit 4 +. lit 28
 
-class default a :: a
-instance default Int where default = 42
-instance default (TaskValue a) where default = NoValue
+//Mag niet
+//Start = printEval (lit 4 +. lit 38)
+Start :: (Maybe Int, String)
+//Start = printEval (lit 2 + lit 40)
+Start = printEval` expr expr
+//Start = printEval expr
 
-listItem ::
-       (A.v: a -> v (TaskValue b) | rtrn, arith v)
-       -> (String, b)
-       | +, toString, default b & default a
-listItem mtask =
-       ( unPrint (mtask default)
-       , default //unEval (mtask default)
-       )
+expr :: v Int | expr v & + (v Int)
+expr = lit 4 + lit 38
+//Start = printEval (lit 4 +. lit 38)
 
-Start :: (String, Int)
-Start = listItem \i->rtrn (lit i)
+//Start = eval (lit 4 + lit 38)
+
+//Mag wel
+//Start = print (lit 4 + lit 38)