[GHC] #6018: Injective type families

GHC ghc-devs at haskell.org
Wed May 7 21:08:56 UTC 2014


#6018: Injective type families
-------------------------------+-------------------------------------------
        Reporter:  lunaris     |            Owner:  simonpj
            Type:  feature     |           Status:  new
  request                      |        Milestone:  7.10.1
        Priority:  normal      |          Version:  7.4.1
       Component:  Compiler    |         Keywords:  TypeFamilies, Injective
      Resolution:              |     Architecture:  Unknown/Multiple
Operating System:              |       Difficulty:  Unknown
  Unknown/Multiple             |       Blocked By:
 Type of failure:              |  Related Tickets:  #4259
  None/Unknown                 |
       Test Case:              |
        Blocking:              |
-------------------------------+-------------------------------------------

Comment (by MikeIzbicki):

 Here's a real worldish use case.

 Let's try to write a modified Functor class that lets us map over not just
 the last type variable, but any type variable.  This would be useful, for
 example, with the Either type.

 The class might look something like:

 {{{
 class Functor loc f where
     fmap :: proxy loc -> (a -> b) -> SetLocation f loc a -> SetLocation f
 loc b
 }}}

 Where loc is a type that uniquely identifies the position of the argument
 we want to map over.  We can't make an instance of this class unless the
 SetLocation type family is injective.

 With a little syntactic sugar, we can convert the above class into
 something that looks very much like the current Functor class, but is
 quite a bit more powerful:

 {{{
 class Functor loc f where
     fmap :: proxy loc -> (a -> b) -> f { loc = a } -> f { loc = b }
 }}}

 I don't think you can get something nearly that clean without injective
 type families.  And, of course, this applies to any parametric classes
 currently in use, not just Functor.

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


More information about the ghc-tickets mailing list