[Haskell-cafe] error vs. MonadError vs. fail