GHC 공식 가이드 - 6.11.3. Explicitly-kinded quantification
폴리모픽 a의 카인드를 명시적으로 지정할 수 있습니다.
하스켈 워크숍 1999에서 John Hughes는 cxt를 Type이 아닌, Type -> Type으로 추론되도록 다음과 같이 정의해야만 했다고 합니다.
data Set cxt a = Set [a] | Unused (cxt a -> ())이렇게 쓰지 않을 Unused를 만들어 cxt가 Type -> Type으로 추론되게끔 했다고 합니다. 하지만 지금은 이 확장을 쓰면 됩니다.
data 선언에서
data Set (cxt :: Type -> Type) a = [a]type 선언에서
type T (f :: Type -> Type) = f Intclass 선언에서
class (Eq a) => C (f :: Type -> Type) a where ...타입 서명의 forall 안에서
f :: forall (cxt :: Type -> Type). Set cxt Int함수 서명에서
g :: (Int :: Type) -> Int
g :: forall a. a -> (a :: Type)이렇게 카인드를 지정해 줄 수 있습니다.
(작성 중)