[GHC] #13430: Can't scope type variables when pattern matching on GADTs

GHC ghc-devs at haskell.org
Thu Mar 16 14:21:12 UTC 2017


#13430: Can't scope type variables when pattern matching on GADTs
-------------------------------------+-------------------------------------
        Reporter:  crockeea          |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.0.2
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  GHC rejects       |  Unknown/Multiple
  valid program                      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by simonpj):

 Looks absolutely right to me.   `foo`'s argument type is `Foo x` not `Foo
 Bool`.  Only ''after'' matching A do we get `Foo Bool`.  But the type
 signature is matched before we get to the A part.

 Better to consider something more like the original question:
 {{{
 data Bar x where
   MkBar :: Typeable b => a -> Bar (a,b)

 bar :: Bar x -> string
 bar (MkBar @a @b _) = show (typeRep (Proxy :: Proxy b))
 }}}
 Here you want to use mention the type variable `b`.  But there is no way
 to bring it into scope since we don't have visible type applications in
 patterns (yet #11350).

 I think that's really the right solution too.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13430#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list