Suggestion:
add another form of statement for monad expressions:
stmts -> ...
if exp
which is defined for MonadZero as follows:
do {if exp ; stmts} = if exp then do {stmts}
else zero
Based on this, one can define list comprehensions by
[ e | q1,...,qn ] = do { q1' ; ... ; qn'; return e }
where either qi' = if qi (whenever qi is an exp)
or qi' = qi (otherwise).
--
Stefan Kahrs
