我的数据类型看起来像
data G f n a where
G :: a -> G f n a -> G f (f n) a
它是一个由自然索引的容器,它采用一种确定如何归纳的函数。
我可以轻松定义类型同义词
type G' n a = G S n a
但我希望能够使用身份功能。
我尝试使用Data.Functor.Identity,但即使使用PolyKinds重新定义,我也无法在Naturals(:k Identity => Nat -> Nat
)上获得类型级函数,所以我转向类型族,定义< / p>
type family Id a where
Id a = a
哪个,很酷,它编译。不幸的是,我提供type G'' n a = G Id n a
并收到
The type family ‘Id’ should have 1 argument, but has been given none
In the type synonym declaration for ‘G''’
那么有没有办法在类型同义词中使用类型族?这似乎是理想的最终状态。
(我目前使用的扩展程序是
{-# LANGUAGE GADTs, TypeFamilies, DataKinds, TypeInType, PolyKinds #-}
)