X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=test.icl;h=822f41d96f79c20b12a4020c848454a937724434;hb=0140429ff1785b6ff033813fe4d4c7cdb018e5a9;hp=6459207b3017032dc00225c4f19b598bdf8b6967;hpb=0ca0e0086ac4e1b0be40f820d213fcfcb7deec20;p=clean-tests.git diff --git a/test.icl b/test.icl index 6459207..822f41d 100644 --- a/test.icl +++ b/test.icl @@ -1,18 +1,38 @@ module test import StdEnv -from Data.Func import $ -import System.Directory -import System.Time +import Data.Maybe +import Data.Functor +import Control.Monad +import Control.Applicative -:: S s a = S .(s -> *(a, s)) -runS (S s) = s +class expr v where + lit :: i -> v i | toString i + (+.) infixl 6 :: (v i) (v i) -> v i | + i -(>>=) infixl 1 :: u:(S .a .b) v:(.b -> .(S .a .c)) -> w:(S .a .c), [w <= u,w <= v] -(>>=) ma a2mb = S \s - # (a, s) = runS ma s - = runS (a2mb a) s +instance + (v a) | expr v & + a where + + l r = l +. r -Start world = flip runS world - $ (S time) - >>= \_->S (readDirectory "/home/mrl") +eval :: (Maybe a) -> Maybe a +eval x = x +instance expr Maybe where + lit i = Just i + +. x y = (+) <$> x <*> y + +:: 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) + +printEval :: (A.v: v a | expr v) -> (Maybe a, String) +//printEval f = (f, let (Print p) = f in p) +printEval f = (eval f, print f) + +//Mag niet +//Start :: (Maybe Int, String) +//Start = printEval (lit 4 + lit 38) + +//Mag wel +Start = let (Print f) = lit 4 + lit 38 in f