[project @ 2003-06-03 22:26:44 by diatchki]
[ghc-base.git] / Control / Monad / X / tests / testNondet.hs
1 import Control.Monad.X.Transformers
2
3
4 pr x      = inBase (putStr $ show x ++ " ")
5
6
7
8
9 test3' _  = pr "1" `mplus` pr "2"
10
11 -- writer & nonedt
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
17
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")
22
23 law3        = do let (lhs,rhs) = law3' ()
24                  print =<< runNondets lhs
25                  print =<< runNondets rhs
26
27
28 test8' _  = (tell "1" >> mzero) `mplus` tell "2"
29
30 main = do -- x <- runWriter $ runNondets (test8' ())
31           x <- runNondet $ runWriter $ test8' ()
32           print x
33
34
35