高階型
Higher Kinded Types、Higher Rank Type、HKT
kindが* → *な型
型を取って型を返す型
型に依存する型
* -> (* -> *)なども含む
高階型は高階多相型を含む(たぶん)
Hoge (f a)はkindが(* -> *) -> * -> * な高階多相型
個別の*は多相であり制限はない
Show a => Hoge aはkindが* -> *な型だが、Showのインスタンスである必要があるので、たぶん多相な高階型とは言わない(?)
これも高階多相型と呼ぶなら、「高階型 == 高階多相型」なのでノートを分ける必要がない
他に候補がないかの確認は必要
実際にあるのか知らないが高階多相型ではない高階型があるイメージがある
高階多相関数ではない高階関数があるイメージ
code:関数.hs
f :: (a -> a) -> Bool -- 高階多相関数
f :: (Int -> Int) -> Bool -- 高階多相関数ではない高階関数
code:型.hs
-- この記述は架空
Hoge f a :: (* -> *) -> * -> * -- 高階多相型
Show a => Hoge a :: (Show => *) -> * -- 高階多相型ではない高階型(?) というよりも「制限のある高階多相型」かな
GADTやKindSignaturesで制限を表現できる
参考
/herp-technote/Higher Kinded Types