高階多相型
型と多層を同一視するのはさすがにおかしいからページ分けた
↓書いてることおかしいかも
例
code:hs
data HigherKinded f a
= Bare a
| Wrapped (f a)
このHigherKindedのkindは(* -> *) -> * -> * これ、例として正しいのか ??mrsekut.icon*2
Proxy型みたいなやつを高階多相型と呼ぶのか? ref code:hs
>> import Data.Proxy
>> :kind Proxy
Proxy :: k -> * // kindが多相になっている
>> :type Proxy :: Proxy (Monoid Bool)
Proxy :: Proxy (Monoid Bool) :: Proxy (Monoid Bool)
>> :type Proxy :: Proxy Monoid
Proxy :: Proxy Monoid :: Proxy Monoid
Proxy :: k -> *のようにkindが多相になっているので、
kには具体型*も、型制約種Constraintも型引数に取ることができる kindが多相なときは、必ず高階型の話になるのかmrsekut.icon
たぶん
多相な関数型必ず引数を取るような感じ
例えば、f :: aに合うような関数って定義できないよね #?? コレと同じ話で、kindが多層的な型って存在しないよね
だからk -> *みたいに必ず1つ以上の型引数をとる型の話になるので、自動的に高階型になる
だから「多相型な高階型」と言わずとも、「多相型」といえば自動的に高階型と言ってるようなことになるはず
でもわかりやすさのためにこう書くのはありだと思う