1 import Control.Monad.X.Transformers
4 pr x = inBase (putStr $ show x ++ " ")
9 test3' _ = pr "1" `mplus` pr "2"
12 test4' _ = tell "1" `mplus` tell "2"
13 test5' _ = listen (tell "1") `mplus` (tell "2" >> return ((),"77"))
14 test6' _ = listen mzero `mplus` (tell "2" >> return ((),"77"))
15 test7' _ = do (x,w) <- listen (tell "b")
16 if w == "a" then mzero else return 7
18 law3' _ = (m >>= f >>= g, m >>= \x -> f x >>= g)
19 where m = pr "m" >> mplus (pr "1") (pr "2")
20 f _ = pr "f" >> mplus (pr "3") (pr "4")
21 g _ = pr "g" >> mplus (pr "5") (pr "6")
23 law3 = do let (lhs,rhs) = law3' ()
24 print =<< runNondets lhs
25 print =<< runNondets rhs
28 test8' _ = (tell "1" >> mzero) `mplus` tell "2"
30 main = do -- x <- runWriter $ runNondets (test8' ())
31 x <- runNondet $ runWriter $ test8' ()