
21 Jan
2011
21 Jan
'11
5:52 a.m.
loop = MonadPlus m => m Bool
loop = loop
If we apply Just to loop as follows
test2 :: MonadPlus m => m (Maybe Bool)
test2 = loop >>= return . Just
the evaluation of test2 does not terminate because >>= has to evaluate loop. But this does not correctly reflect the behaviour in a functional logic language like Curry. For example, if you have a function that checks whether the outermost constructor of test2 is Just, the test is supposed to be successful. In the naive model for non-determinism this is not the case.
Do I have to have MonadPlus m or would any other Monad class work the same way? -- Daryoush Weblog: http://perlustration.blogspot.com/