[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