高階多相型
#WIP
型と多層を同一視するのはさすがにおかしいからページ分けた
高階多相
↓書いてることおかしいかも
多相型である高階型のこと
とある型
もしくは型コンストラクタ
高階型の方が指している部分が広い
ref kind周辺の用語の整理#5eb6d9f61982700000bebc43
型演算子を扱うので型演算と呼んだりもする
例
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つ以上の型引数をとる型の話になるので、自動的に高階型になる
だから「多相型な高階型」と言わずとも、「多相型」といえば自動的に高階型と言ってるようなことになるはず
でもわかりやすさのためにこう書くのはありだと思う
TaPL 30章
https://medium.com/@JosephJnk/what-is-higher-kinded-polymorphism-6fb2bff183f9
https://qiita.com/lyrical_logical/items/2d68d378a97ea0da88c0
https://medium.com/@JosephJnk/what-is-higher-kinded-polymorphism-6fb2bff183f9
https://qiita.com/lotz/items/8b22ce15fb66cf293536
https://kgtkr.net/blog/2018/09/18/typescript-hkt
型コンストラクタの幽霊型もできる
/LugendrePublic/種多相
http://www.kotha.net/ghcguide_ja/7.4.2/kind-polymorphism-and-promotion.html
http://www.kotha.net/ghcguide_ja/latest/kind-polymorphism.html
https://en.wikipedia.org/wiki/Type_constructor
https://zehnpaard.hatenablog.com/entry/2022/03/01/070720
https://zehnpaard.hatenablog.com/entry/2022/03/02/104034