这个简单的代码没有编译
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
确实有效,但它没有相同的语义,也不能使用相同的语法。
答案 0 :(得分:3)
无需在结果类型中命名t
。你可以简单地使用
type family F (k :: Type) :: k -> Type