MonadFail proposal (MFP): Moving fail out of Monad

Herbert Valerio Riedel hvr at gnu.org
Wed Jun 10 10:34:50 UTC 2015


On 2015-06-10 at 00:42:12 +0200, David Luposchainsky wrote:

[...]

> I think there are two important consequences of MonadFail. First of all, we can
> all safely write failable patterns if we so desire. Second, the compiler can
> ensure other people's codebases do not lie to us (knowingly or unknowingly).

...as a data-point, when turning on MonadFail during testing, I've seen
at least one place in GHC's own code-base that directly calls 'fail' for
a Monad instance which did *not* have its 'fail' method
overridden. Moreover, I've seen at least one (other) case, where
failable pattern matches occurred (intentionally or not[1]), but the
respective Monad instance didn't have the 'fail' method overridden
either.

 [1]: Failable patterns can in theory snuck in non-intentionally,
      e.g. they can be introduced during refactoring if e.g. a
      single-constructor type gets added new constructors. If the
      context was previously constraint to a 'Monad', after the
      refactoring the typechecker would point out that now there's a
      failable pattern not accounted for.


More information about the ghc-devs mailing list