HKT(高カインド型)
型システムの機能の一つで、型コンストラクタ(型を引数に取る型)を抽象化できる。Functor FのFを、List、Option、Treeなど任意のコンテナ型にできる、「ジェネリクスに対するジェネリクス」だ。
HaskellとScalaでは標準機能で、型クラスによる抽象化の土台になる。Monad、Functor、Applicativeはすべて、HKTを必要とする。RustにはHKTがなく、「Rustにモナドがない理由」の議論が絶えない。代わりにGAT(Generic Associated Types)が、大半のユースケースをカバーする。TypeScriptにもなく、コミュニティはfp-tsライブラリで回避している。主流言語にとっては、HKTは理屈としてはきれいだが、単純な場面では複雑さが増える。最近の方向としては、Rust、Swift、Carbonは明示的にHKTを見送る道を選んでいる。