[GHC] #14252: ApplicativeDo: Add compiler message about irrefutable pattern matches and Monad constraints
GHC
ghc-devs at haskell.org
Wed Sep 20 14:36:05 UTC 2017
#14252: ApplicativeDo: Add compiler message about irrefutable pattern matches and
Monad constraints
-------------------------------------+-------------------------------------
Reporter: mutantmell | Owner: (none)
Type: feature request | Status: new
Priority: normal | Milestone: 8.4.1
Component: Compiler | Version: 8.2.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Description changed by mutantmell:
Old description:
> Add an error message to the compiler when ApplicativeDo desugaring:
> * requires a Monad constraint when a Functor/Applicative constraint is
> expected
> * 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 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). Adding a message would provide both
> clarification around the requirement, and provide a simple resolution for
> the common use case.
New description:
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 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). Adding a message would provide both
clarification around the requirement, and provide a simple resolution for
the common use case.
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14252#comment:4>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list