[GHC] #8583: Associated pattern synonyms

GHC ghc-devs at haskell.org
Wed Oct 7 17:35:29 UTC 2015


#8583: Associated pattern synonyms
-------------------------------------+-------------------------------------
        Reporter:  cactus            |                Owner:
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:
      Resolution:                    |             Keywords:
                                     |  PatternSynonyms
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:  5144              |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
-------------------------------------+-------------------------------------

Comment (by goldfire):

 Yes yes yes. I want this!

 But it's tricky, even forgetting about implementation for the moment.
 Let's pretend that all types have to be explicit for a sec, and I'll
 continue the example from the original post:

 {{{#!hs
 headOfList :: forall a. [a] -> Maybe a
 headOfList (Nil @[] @a) = Nothing @a
 headOfList (Cons @[] @a x _) = Just x
 }}}

 There's something very strange going on here. It looks, in those patterns,
 that we're pattern-matching on a ''type''. This, of course, is not
 allowed, because types are erased. Upon further inspection, we're not
 really doing this. The first type parameter to `Nil` and `Cons` are
 ''inputs''. Contrast to the second type parameter and the term parameters
 (to `Cons`), which are ''outputs''.

 Another way to see this is to think about how `Nil @[] @a` and `Nil @Seq
 @a` are both valid patterns, but `Nil @l @Int` would be terrible, as it
 requires doing a type check at runtime.

 So I wonder if implementing this without terrible hacks might depend on
 PatternFamilies which (despite its name) allows for a mix of inputs and
 outputs in pattern synonyms.

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


More information about the ghc-tickets mailing list