확장 KindSignatures (작성 중)

Posted on January 5, 2023

GHC 공식 가이드 - 6.11.3. Explicitly-kinded quantification

폴리모픽 a의 카인드를 명시적으로 지정할 수 있습니다.

하스켈 워크숍 1999에서 John Hughes는 cxtType이 아닌, Type -> Type으로 추론되도록 다음과 같이 정의해야만 했다고 합니다.

data Set cxt a = Set [a] | Unused (cxt a -> ())

이렇게 쓰지 않을 Unused를 만들어 cxtType -> 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)

이렇게 카인드를 지정해 줄 수 있습니다.

(작성 중)

Github 계정이 없는 분은 메일로 보내주세요. lionhairdino at gmail.com