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 Int
class
선언에서
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)
이렇게 카인드를 지정해 줄 수 있습니다.
(작성 중)