
#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 simonpj): The inferred type of `C1` should be isomoprhic to the declared type of `C2`. That is you should be able to declare `C2`'s type as {{{ pattern C2 :: (t ~ Maybe a) => a -> X t }}} if you want. Just as you can in a GADT declaration: the data constructor decl {{{ C :: arg1 -> arg2 -> T (Maybe a) }}} is precisely equivalent to (i.e. indistinguishable from) {{{ C :: (t ~ Maybe a) => arg1 -> arg2 -> T t }}} In the same way, you should be able to declare `C3`'s type as {{{ pattern C3 :: (t ~ Maybe a) => (Eq a) => a -> X t }}} if you want. As discussed in #9954, `C3` is simply ill typed. Does that resolve it? Simon -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9953#comment:8 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler