[GHC] #15681: Take {-# COMPLETE #-} pragma into consideration when using MonadFailDesugaring
GHC
ghc-devs at haskell.org
Fri Sep 28 03:49:34 UTC 2018
#15681: Take {-# COMPLETE #-} pragma into consideration when using
MonadFailDesugaring
-------------------------------------+-------------------------------------
Reporter: chshersh | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone: 8.6.1
Component: Compiler | Version: 8.6.1
Resolution: | Keywords: pattern-
| matching,monadfail,desugaring
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by simonpj):
> That's because it's determining if a pattern synonym is irrefutable by
consulting the plain old data constructors that correspond to the type
constructor that heads its return type
Yes, that is pretty dodgy! Eg I think it would give the wrong answer for
{{{
pattern P a = (Just a, True)
}}}
The outer constructor is `(,)`, but that doesn't mean that `P x` is
irrefutable.
Naively, one might think that the simple thing do to is to behave as if
the type synonym was expanded at the use site. But that breaks the
abstraction that is part of the purpose of having a pattern synonym. And
in fact, in separate compilation, GHC does not record the original
definition directly; it just exports teh builder and matcher functions for
the pattern synonym.
The right thing must surely be to use the `COMPLETE` sets, somehow.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15681#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list