
That's kind of weird. But you can write {{{ pattern P :: a ~ Int => () => G a -- current syntax; (Int ~ a) is
#10928: Refine pattern synonym signatures -------------------------------------+------------------------------------- Reporter: mpickering | Owner: Type: bug | Status: new Priority: normal | Milestone: 8.0.1 Component: Compiler | Version: 7.10.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: Other | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): -------------------------------------+------------------------------------- Comment (by goldfire): Replying to [comment:18 rwbarton]: provided constraint
pattern P = MkG }}} and then `pat` is accepted...
Sure you can. But such a `P` is different from the one I defined. Very, very subtly different, but indeed different: matching on your `P` tells the type checker that `a ~ Int`, whereas matching on my `P` asks the type checker to prove `a ~ Int`. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10928#comment:19 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler