高階型
Higher Kinded Types、Higher Rank Type、HKT 型を取って型を返す型
型に依存する型
* -> (* -> *)なども含む
個別の*は多相であり制限はない
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 => *) -> * -- 高階多相型ではない高階型(?) というよりも「制限のある高階多相型」かな
参考