generated at
Higher Kinded Types

型を受け取って型を返す型 ( * → * )。高階型、Higher Rank Typesとも。HKTと略される。

例えばHKTの無いOCamlでは、 'a list 型ではなく型コンストラクタという扱いになっているが、HKTのあるHaskell( List A または [A] )では * → * という A 型を受け取って [A] を返すである。
式を取って式を返すという関数が式であるとさまざまな実りがある(c.f. ラムダ計算)ように、型を受け取って型を返すという仕組みも型に含まれているとさまざまな嬉しさがある。

例えばFunctorはHKTをガンガン使う。
haskell
class Functor f where fmap :: (a -> b) -> f a -> f b
上のコードの f はまさに * → * という型を要請している。

その反面、非常に強力な機能であるため、実装が難しかったり推論がキツくなったりするなどの欠点がある。

色々頑張ってHKTをエンコードする方法があり、OCamlのhigherやTypeScriptのfp-tsはこれを利用している。