[GHC] #8516: Add (->) representation and the Invariant class to GHC.Generics

GHC ghc-devs at haskell.org
Wed Nov 18 23:35:23 UTC 2015


#8516: Add (->) representation and the Invariant class to GHC.Generics
-------------------------------------+-------------------------------------
        Reporter:  nfrisby           |                Owner:
            Type:  feature request   |               Status:  new
        Priority:  low               |            Milestone:
       Component:  Compiler (Type    |              Version:  7.7
  checker)                           |
      Resolution:                    |             Keywords:
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 RyanGlScott):

 I really like the idea of adding `(:->:)` to `GHC.Generics`. One of my
 biggest gripes with `deriving Generic1` is that it doesn't work with many
 data types that have function arguments (e.g., `Endo`). I think adding
 `(:->:)` would allow GHC generics to at least be as expressive as
 `DeriveFunctor`/`Foldable`/`Traversable`.

 I'm a bit hesitant about adding `Invariant` to `base`, however, primarily
 because I find it unlikely that it would ever be made a superclass of
 `Functor`, given the sheer amount of breakage that would cause. Moreover,
 I don't think we need `Invariant` to be able to derive `Generic1` for data
 types with `(:->:)`. I believe at most a generated `Generic1` instance
 would need some `Functor` constraints, but that's no different than the
 current story.

 (I haven't worked out the additional rules you'd need to add to the
 algorithms in Figures 1-4 of http://dreixel.net/research/pdf/gdmh.pdf, but
 the examples I've worked out by hand so far have only needed `Functor`
 constraints.)

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


More information about the ghc-tickets mailing list