[project @ 2003-06-03 22:26:44 by diatchki]
[ghc-base.git] / Control / Monad / X / tests / ReaderNondet.hs
1 import Control.Monad.X.ReaderT
2 import Control.Monad.X.NondetT
3 import Control.Monad.X.Identity
4
5 t0,t1,t2 :: (MonadReader String m, MonadNondet m) => m String
6 t0        = local ('a':) mzero
7 t1        = (local ('a':) mzero) `mplus` ask
8 t2        = local ('a':) (mzero `mplus` ask)
9
10
11 run1 m   = runIdentity $ runReader "x" $ runNondet $ m
12 run2 m   = runIdentity $ runNondet $ runReader "x" $ m
13
14 test      :: Eq a => (forall m. (MonadReader String m, MonadNondet m) => m a) -> Maybe a -> Bool
15 test t r  = run1 t == r && run2 t == r
16
17
18 main    = do print $ test t0 Nothing
19              print $ test t1 (Just "x")
20              print $ test t2 (Just "ax")
21