[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