When a value is bound in 
do-notation, the pattern on the left
hand side of 
<- might not match. In this case, this class
provides a function to recover.
A 
Monad without a 
MonadFail instance may only be used in
conjunction with pattern that always match, such as newtypes, tuples,
data types with only a single data constructor, and irrefutable
patterns (
~pat).
Instances of 
MonadFail should satisfy the following law:
fail s should be a left zero for 
>>=,
fail s >>= f  =  fail s
If your 
Monad is also 
MonadPlus, a popular definition is
fail _ = mzero
fail s should be an action that runs in the monad itself, not
an exception (except in instances of 
MonadIO). In particular,
fail should not be implemented in terms of 
error.