启用 PolyKinds
后,之前有效的类型签名可能会变为无效。
以下代码在没有启用 PolyKinds
的情况下可以编译。
{-# LANGUAGE KindSignatures #-}
import GHC.Generics
foo :: Constructor c => t c (f :: * -> *) a -> [Char]
foo = conName
当我启用PolyKinds
时,它无法编译。
Kind incompatibility when matching types:
t0 :: * -> (* -> *) -> * -> *
t :: * -> (* -> *) -> k -> *
Expected type: t c f a -> [Char]
Actual type: t0 c f a0 -> [Char]
Relevant bindings include
foo :: t c f a -> [Char] (bound at Gen.hs:8:1)
In the expression: conName
In an equation for ‘foo’: foo = conName
启用 PolyKinds
后,有没有一种方法来给 foo
指定类型签名?
foo :: Constructor c => (t :: * -> (* -> *) -> * -> *) c (f :: * -> *) a -> [Char]
这段代码是正常工作的,不是错误或特性。 - user1078763