TL;DR
- Higher Kinded Types(HKTs)は型コンストラクタを引数に取る型で、実装が複雑になりコンパイルも遅くなるので、多くの言語はサポートしていない。
- 多くの実用アプリケーションは HKTs なしで困っておらず、増えるボイラープレートも今は AI が書ける。
内容
Higher Kinded Types(HKTs)とは、Functor[F[_]] のように型コンストラクタを引数に取る型である。
HKTs をコンパイラに実装すると、実装自体が複雑になり、コンパイルも遅くなる。そのため、TypeScript や Rust など、ほとんどの言語は HKTs をサポートしていない。コンパイラの負担として、高階単一化が必要になることと、暗黙の解決(型クラスの解決)が複雑になることが挙げられた。完全な型推論を諦めて実装するなら、パターン単一化を使う、ヒューリスティックに頼る、ユーザに型注釈を求めるといった方法がある。HKTs を使った抽象化(Free モナドによる Effect System など)では、ランタイムの負荷も問題になる。
一方で、HKTs がなくても回る。多くの実用アプリケーションは HKTs なしで困っていない。ボイラープレートは増えるが、今は AI がコードを書くので、この点は問題になりにくい。それでも、AI が書いた大量のコードが型のレベルで一貫しているかは別の話なので、型で保証したい。