5 EqualTo :: a a -> Bool | == a
8 LessThen :: a a -> Bool | < a
11 Not :: (a -> Bool) a -> Bool
14 Is :: (a -> Bool) a -> Bool
17 (Or) infixl 2 :: (a -> Bool) (a -> Bool) -> (a -> Bool)
18 (Or) f g = \x . f x || g x
20 AssertThat :: String a (a -> Bool) -> [String]
21 AssertThat id x f | f x = [id : " " : "PASS" : []]
22 | otherwise = [id : " " : "FAIL": []]
24 instance * [String] where
25 (*) x y = x ++ ["\n":y]
27 test :: [String] -> [String]
30 a1 = AssertThat "(2*2) (Is (EqualTo (2+2)))" (2*2) (Is(EqualTo (2+2)))
31 a2 = AssertThat "(3*3) (EqualTo (3+3))" (3*3) (EqualTo (3+3))
32 a3 = AssertThat "(length [0..3]) is not 4" (length [0..3]) (Not(EqualTo 4))
34 report = test (a1*a2*a3)
36 instance <<< [String] where
38 (<<<) file [s:ss] = file <<< s <<< ss
40 Start :: !*World -> *World
42 # (file, world) = stdio world
43 # file = file <<< report
44 # (ok, world) = fclose file world