[GHC] #8177: Roles for type families

GHC ghc-devs at haskell.org
Tue Aug 27 08:14:28 UTC 2013


#8177: Roles for type families
------------------------------------+-------------------------------------
       Reporter:  simonpj           |             Owner:
           Type:  bug               |            Status:  new
       Priority:  normal            |         Milestone:
      Component:  Compiler          |           Version:  7.6.3
       Keywords:                    |  Operating System:  Unknown/Multiple
   Architecture:  Unknown/Multiple  |   Type of failure:  None/Unknown
     Difficulty:  Unknown           |         Test Case:
     Blocked By:                    |          Blocking:
Related Tickets:                    |
------------------------------------+-------------------------------------
 Now that we have [wiki:Roles roles], it might be helpful to be able to
 give a role signature for a data/type family.

 At the moment, data/type family constructors have all parameters
 conservatively assigned to be role `N`.  Thus
 {{{
 data family D a    -- Parameter conservatively assumed to be N

 class C a where
   op :: D a -> a

 instance C Int where ....

 newtype N a = MkN a deriving( C )  -- Rejected
 }}}
 The generalised-newtype-deriving clause `deriving( C )` is rejected
 because `D` might use its parameter at role `N` thus:
 {{{
 data instance D [b] = MkD (F b)   -- F is a type function
 }}}
 It would be strictly more expressive if we could
  * '''Declare''' the roles of D's arguments (as we can declare their
 kinds). E.g.
 {{{
 data family D a at R
 }}}
  * '''Check''' that each family instance obeys that role signature.  E.g.
 given the preceding role signature, reject this instance:
 {{{
 data instance D [b] = MkD (F b)   -- F is a type function
 }}}

 I think there is no technical difficulty here.  Just a question of doing
 it.

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




More information about the ghc-tickets mailing list