| > 1.Fix up the current version.
| >     use MonadZero for do expressions with *irrefutable* patterns
| >     (instead of *unfailable* patterns as now)
| > 2.Nuke MonadZero altogether.
| >     add mfail :: m a  to Monad instead

I opt for 2. It's certainly true that the second choice breaks existing
code, but this can easily be repaired: simply replace MonadZero by
Monad and zero by mfail (given that mfail = error "fail" is added as a
default). Right? This change is quite undramatic. And it solves a lot
of problems.


Reply via email to