[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