[GHC] #14645: Allow type family in data family return kind
GHC
ghc-devs at haskell.org
Mon Jan 8 13:34:15 UTC 2018
#14645: Allow type family in data family return kind
-------------------------------------+-------------------------------------
Reporter: goldfire | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.4.1-alpha1
Resolution: | Keywords: TypeInType,
| TypeFamilies
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 simonpj):
Let's translate to FC. Here's the example
{{{
type family TF (x :: Type) :: Type
data family DF (x :: Type) :: TF x
type instance TF Bool = Type -> Type
data instance DF Bool (a :: Type) = T1 a | T2
}}}
The translation to FC might look like this
{{{
axiom ax1 :: TF Bool ~ (Type -> Type)
data DFBool a = T1 a | T2 -- An ordinary algebraic data type
-- T1 :: a -> DFBool a
axiom ax2 :: DFBool ~ DF Bool |> ax1
$WT1 :: forall a. a -> DF Bool a
$WT1 = /\a. \(x::a). T1 x |> ax2 a
-- ax2 a :: DFBool a ~ ((DF Bool) |> ax1) a
}}}
The kind coercion `|> ax1` in the kind of `axiom ax2` is essential to make
axiom `ax2` homogeneously kinded; both sides have kind `Type -> Type`.
Does that look right?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14645#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list