类型族强制参数有类型*

时间:2017-06-30 14:36:43

标签: haskell type-families type-kinds

这个简单的代码没有编译

import Data.Kind
type family F (k :: Type) :: (t :: k) -> Type

错误消息是

• Expected a type, but ‘t’ has kind ‘k’
• In the kind ‘(t :: k) -> Type’

我从某种意义上说,这实际上定义了一个"类型系列家族"但我真的不明白为什么存在这种限制。

type family F (k :: Type) (t :: k) :: Type

确实有效,但它没有相同的语义,也不能使用相同的语法。

1 个答案:

答案 0 :(得分:3)

无需在结果类型中命名t。你可以简单地使用

type family F (k :: Type) :: k -> Type