[GHC] #12203: Allow constructors on LHS of (implicit) bidirectional pattern synonym

GHC ghc-devs at haskell.org
Thu Aug 25 19:46:56 UTC 2016


#12203: Allow constructors on LHS of (implicit) bidirectional pattern synonym
-------------------------------------+-------------------------------------
        Reporter:  ezyang            |                Owner:
            Type:  feature request   |               Status:  new
        Priority:  low               |            Milestone:
       Component:  Compiler (Type    |              Version:  8.0.1
  checker)                           |             Keywords:
      Resolution:                    |  PatternSynonyms
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by mpickering):

 I don't think this is a great idea. The specification about what can
 appear on the RHS is currently very simple, it just has to be a pattern.
 The rules for turning this pattern into an expression are also very simple
 and rely on the fact that a lot of pattern syntax looks like the
 corresponding expression.

 Allowing this change complicates things, firstly in the parser, `Vec (x :
 unVec xs)` is not valid pattern syntax currently. Secondly, the rules for
 how to perform the inversion require more thought. Looking at Simon's
 example, I have to think a bit about what should happen.. it seems the
 corresponding expression should be `Vec (x : Vec xs)` but I'm still not
 sure that is right! Perhaps the rule is as simple as replace the function
 with it's inverse but it seems ad-hoc to me.

 I do have other lingering concerns that the way we designed the feature,
 the most useful constructs are the least supported. I'm referring to the
 fact that all interesting uses are explicitly bidirectional pattern
 synonyms which require view patterns. Such definitions tend to be quite
 noisy to define -- something more like views would have made things
 cleaner.

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


More information about the ghc-tickets mailing list