Skip to content

ApplicativeDo: Add compiler message about irrefutable pattern matches and Monad constraints

Add an error message to the compiler when:

  • A user-provided signature specifies a Functor/Applicative constraint
  • ApplicativeDo desugaring requires a Monad constraint
  • Adding a lazy pattern match could allow the Functor/Applicative constraint

bgamari suggests something like the following message:

ApplicativeDo is enabled yet Monad is required due to irrefutable pattern match;
perhaps you want to make the match refutable by adding a ~?

Background:

In GHC 8.2.1, ApplicativeDo desugaring was changed to require monad constraints when using a strict pattern match (see #13875 (closed) for details). While this behavior is a requirement for maintaining the intended semantics of ApplicativeDo, it is both a breaking change, and somewhat unintuitive (see #14249 (closed)). Adding a message would provide both clarification around the requirement, and provide a simple resolution for the common use case.

Edited by mutantmell
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information