cloud
[clean-tests.git] / test.icl
index 9837893..822f41d 100644 (file)
--- a/test.icl
+++ b/test.icl
 module test
 
-import iTasks
+import StdEnv
+import Data.Maybe
+import Data.Functor
+import Control.Monad
+import Control.Applicative
 
-Start w = doTasks t w
+class expr v where
+       lit :: i -> v i | toString i
+       (+.) infixl 6 :: (v i) (v i) -> v i | + i
 
-t:==palindrome
+instance + (v a) | expr v & + a where
+       + l r = l +. r
 
-palindrome :: Task (Maybe String)
-palindrome
-       =       enterInformation "Enter a palindrome" []
-       >>*     [ OnAction  ActionOk     (ifValue palindrome (\v -> return (Just v)))
-            , OnAction  ActionCancel (always (return Nothing))
-            ]
-    >>=                viewInformation "Result is:" []
-where
-       palindrome s = lc == reverse lc
-       where
-               lc :: [Char]
-               lc = fromString s
+eval :: (Maybe a) -> Maybe a
+eval x = x
+instance expr Maybe where
+       lit i = Just i
+       +. x y = (+) <$> x <*> y
 
-//t :: Task (Int, Int)
-//t = enterInformation "Left" [] -&&- enterInformation "Right" []
-//     >>= viewInformation "Result" []
+:: 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)
 
-//import Data.GenDefault
-//
-//:: T =
-//     { a0 :: Int
-//     , a1 :: Int
-//     , a2 :: Int
-//     , a3 :: Int
-//     , a4 :: Int
-//     , a5 :: Int
-//     , a6 :: Int
-//     , a7 :: Int
-//     , a8 :: Int
-//     , a9 :: Int
-//     , a10 :: Int
-//     , a11 :: Int
-//     , a12 :: Int
-//     , a14 :: Int
-//     , a15 :: Int
-//     , a16 :: Int
-//     , a17 :: Int
-//     , a18 :: Int
-//     , a19 :: Int
-//     , a20 :: Int
-//     , a21 :: Int
-//     , a22 :: Int
-//     , a23 :: Int
-//     , a24 :: Int
-//     , a25 :: Int
-//     , a26 :: Int
-//     , a27 :: Int
-//     , a28 :: Int
-//     , a29 :: Int
-//     , a30 :: Int
-//     , a31 :: Int
-//     , a32 :: Int
-//     }
-//
-//class c a
-//where
-//     a0 :: a
-//     a1 :: a
-//     a2 :: a
-//     a3 :: a
-//     a4 :: a
-//     a5 :: a
-//     a6 :: a
-//     a7 :: a
-//     a8 :: a
-//     a9 :: a
-//     a10 :: a
-//     a11 :: a
-//     a12 :: a
-//     a14 :: a
-//     a15 :: a
-//     a16 :: a
-//     a17 :: a
-//     a18 :: a
-//     a19 :: a
-//     a20 :: a
-//     a21 :: a
-//     a22 :: a
-//     a23 :: a
-//     a24 :: a
-//     a25 :: a
-//     a26 :: a
-//     a27 :: a
-//     a28 :: a
-//     a29 :: a
-//     a30 :: a
-//     a31 :: a
-//     a32 :: a
-//     a33 :: a
-//     
-//
-//derive gDefault T
-//
-//Start :: T
-//Start = gDefault{|*|}
+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