X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=rank2%2Ftest.icl;h=fb00656b816dd27d330c0ad636e0f15939781cbb;hb=e5aaa59a63adaafb54d4845a06e16c4ef37c1b5f;hp=da538523d774506fa1318dfb67a8b663c18bbab2;hpb=d26be584859f046d29708d03c41861d421cefc6d;p=clean-tests.git diff --git a/rank2/test.icl b/rank2/test.icl index da53852..fb00656 100644 --- a/rank2/test.icl +++ b/rank2/test.icl @@ -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)