Lightweight Higher-kinded Polymorphism
#型システム #TypeScript #fp-ts高階型の無い型システムにおいて高階型をエンコードする方法。defunctionalizationを応用して、HKTの高階型を関数、型適用を関数適用にそのまま当てはめる。[** fp-tsにおける高階型][fp-ts]では`HKT`というinterfaceが用意されている。作者が`Option`を題材に使い方を説明している。
* → *
)。高階型、Higher Rank Typesとも。HKTと略される。 'a list
は型ではなく型コンストラクタという扱いになっているが、HKTのあるHaskell( List A
または [A]
)では * → *
という A
型を受け取って [A]
を返す型である。class Functor f where
fmap :: (a -> b) -> f a -> f b
f
はまさに * → *
という型を要請している。