[GHC] #7808: data families and TH names do not mix well (e.g. cannot use TH deriving)

GHC cvs-ghc at haskell.org
Wed Apr 3 17:20:03 CEST 2013


#7808: data families and TH names do not mix well (e.g. cannot use TH deriving)
-----------------------------+----------------------------------------------
Reporter:  duncan            |          Owner:                  
    Type:  feature request   |         Status:  new             
Priority:  normal            |      Component:  Template Haskell
 Version:  7.6.2             |       Keywords:                  
      Os:  Unknown/Multiple  |   Architecture:  Unknown/Multiple
 Failure:  None/Unknown      |      Blockedby:                  
Blocking:                    |        Related:                  
-----------------------------+----------------------------------------------
 lots of Haskell libraries have TH functions like:
 {{{
 deriveJSON :: Name -> Q [Dec]
 }}}
 (e.g. aeson package for deriving JSON conversion)

 They're used like
 {{{
 data Foo = Foo This That

 $(deriveJSON ''Foo)
 }}}
 the `deriveJSON` reifies the Name and expects to find that the name refers
 to a data type, from which it finds the data constructors and generates
 the appropriate code.

 Now, this doesn't work when the data type we want to derive an instance
 for is defined using a data family:
 {{{
 class FooClass a where
   data Foo a
   ...

 instance FooClass Bar where
   data Foo Bar = Bar This That

 $(deriveJSON ''Foo Bar) -- ???
 }}}

 We'd like to make the type Foo Bar an instance of the class (e.g.
 To/FromJSON) but `deriveJSON` expects a Name, and there is no name for
 this data type, its "name" is `Foo Bar` but obviously that's not a
 `TH.Name`.

 Of course in general a name for a type application doesn't make sense, but
 for data family instances what other way do we have to refer to them?

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7808>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler



More information about the ghc-tickets mailing list