输入返回* - >的实例*

时间:2015-01-28 02:33:49

标签: haskell type-kinds

我正在使用linear库,我试图创建一种推理三角矩阵的方法。

作为第一步,我尝试创建一种方法来计算下三角矩阵的大小。例如,M22具有包含3个元素的下三角矩阵,因此它将映射到V3

这是我的尝试:

import Linear

type family LowerTriPacked v :: * -> *
type instance LowerTriPacked V0 = V0
type instance LowerTriPacked V1 = V1
type instance LowerTriPacked V2 = V3

但它没有打字,但是:

Expecting one more argument to ‘V0’
The first argument of ‘LowerTriPacked’ should have kind ‘*’,
  but ‘V0’ has kind ‘* -> *’
In the type ‘V0’
In the type instance declaration for ‘LowerTriPacked’

这是类型检查:

type family LowerTriPacked2 v :: *
type instance LowerTriPacked2 (V0 a) = V0 a
type instance LowerTriPacked2 (V1 a) = V1 a
type instance LowerTriPacked2 (V2 a) = V3 a

但它不是我想要的,因为现在我无法使用

class (Traversable (LowerTriPacked2 v a)) => Triangular v a

因为Traversable* -> *种。

第一次尝试的语法出了什么问题?

1 个答案:

答案 0 :(得分:11)

参数的默认种类是*;但您可以通过提供类型注释来覆盖默认值。像这样:

type family LowerTriPacked (v :: * -> *) :: * -> *