[GHC] #9953: Pattern synonyms don't work with GADTs
GHC
ghc-devs at haskell.org
Sun Jan 4 04:46:43 UTC 2015
#9953: Pattern synonyms don't work with GADTs
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner: cactus
Type: bug | Status: new
Priority: normal | Milestone: 7.10.1
Component: Compiler (Type | Version: 7.10.1-rc1
checker) | Keywords:
Resolution: | PatternSynonyms
Operating System: Unknown/Multiple | Architecture:
Type of failure: None/Unknown | Unknown/Multiple
Blocked By: | Test Case:
Related Tickets: | Blocking:
| Differential Revisions:
-------------------------------------+-------------------------------------
Comment (by cactus):
Here's a hopefully more enlightening description of the problem in
ticket:9953#comment:6. Suppose we have this setup:
{{{#!hs
{-# LANGUAGE GADTs, PatternSynonyms, ViewPatterns #-}
data X t where
Y :: a -> X (Maybe a)
f :: (Eq a) => a -> a
f = id
-- inferred type:
-- pattern C1 :: t ~ Maybe a => a -> X t
pattern C1 x = Y x
pattern C2 :: a -> X (Maybe a)
pattern C2 x = Y x
pattern C3 :: () => (Eq a) => a -> X (Maybe a)
pattern C3 x = Y (f -> x)
}}}
The difference between `C1`'s inferred type and `C2`'s type is the subject
of this ticket; with the point being that we should be reconstructing
`C1`'s type from the signature given for `C2`.
The types of the matchers generated are as follows:
{{{#!hs
$mC1 :: forall r t. X t -> (forall a. (t ~ Maybe a) => a
-> r) -> (Void# -> r) -> r
$mC2 :: forall r a. X (Maybe a) -> ( a
-> r) -> (Void# -> r) -> r
$mC3 :: forall r a. (Eq a) => X (Maybe a) -> ( a
-> r) -> (Void# -> r) -> r
}}}
If `C2` got the same type as `C1`, what would be the analogous type for
`C3`? What would be `$mC3`'s type in that case?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9953#comment:7>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list