键入Family作为类型同义词的参数

时间:2018-05-23 17:28:43

标签: haskell dependent-type type-families

我的数据类型看起来像

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 #-}

0 个答案:

没有答案