
#9954: Required constraints are not inferred for pattern synonyms involving GADTs -------------------------------------+------------------------------------- Reporter: cactus | Owner: cactus Type: bug | Status: new Priority: normal | Milestone: Component: Compiler (Type | Version: checker) | Keywords: Resolution: | PatternSynonyms Operating System: Unknown/Multiple | Architecture: Type of failure: GHC rejects | Unknown/Multiple valid program | Test Case: Blocked By: | Blocking: Related Tickets: #9953 | Differential Revisions: -------------------------------------+------------------------------------- Comment (by simonpj): This looks absolutely correct to me. Try it with an ordinary function, without the synonym: {{{ boo :: T a -> Bool boo (MkT2 (f -> x)) = True }}} and you get {{{ T9954.hs:12:12: Could not deduce (Eq a1) arising from a use of `f' from the context a ~ Maybe a1 bound by a pattern with constructor: MkT2 :: forall a. a -> T (Maybe a), in an equation for `boo' at T9954.hs:12:6-18 Possible fix: add (Eq a1) to the context of the data constructor `MkT2' In the expression: f In the pattern: f -> x In the pattern: MkT2 (f -> x) }}} And indeed, from where can we conjure up equality on the existentially- bound type? So to me this looks like precisely the correct behaviour. Siimon -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9954#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler