module Main where main = putStrLn "-- Monad experiments, 11/2005 --" -- example 1.1 m = list >> (putStrLn.show) -- equiv to... ( ["anna", "carol"] >>= \x -> -- do x <- [..., ...] ["bill", "dave" ] >>= \y -> -- y <- [..., ...] return (x,y) -- return (x,y) ) --[(a,b), (a,d), (c,b), (c,d)] -- example 1.2 m = list >> (putStrLn.show) ( ["anna", "carol"] >>= \x -> concat [ return [x], -- blob with TV ["bill", "dave" ] >>= \y -> -- a date? if x > y then fail "bad vibe" else return [x,y] ] ) --[[a],[a,b],[a,d],[c],[c,d]] -- example 2 m = Maybe >> let sqrt x = if x >= 0 then Just(x**0.5) else Nothing in (putStrLn.show) ( sqrt 4 >>= \x -> sqrt 9 >>= \y -> return (x+y) ) -- Just 5.0 -- example 3 m = IO >> return "print-me" >>= putStrLn >> fail "-- stopping by invoking IO's fail --" -- ------------------------------------------------LA--11/2005--