Maybe -cgi +transformers
The MaybeT monad transformer adds the ability to fail to a monad.
A sequence of actions succeeds, producing a value, only if all the actions in the sequence are successful. If one fails, the rest of the sequence is skipped and the composite action fails.
For a variant allowing a range of error values, see Control.Monad.Trans.Error.
The parameterizable maybe monad, obtained by composing an arbitrary monad with the Maybe monad.
Computations are actions that may produce a value or fail.
The return function yields a successful computation, while >>= sequences two subcomputations, failing on the first error.