いくつかの言語は、(例えば、型パラメータを持つクラスおよび機能を可能にするList<T>
場合T
、任意のタイプであってもよいです)。たとえば、次のような関数を使用できます。
List<S> Function<S, T>(List<T> list)
ただし、一部の言語では、この概念を1レベル上に拡張して、署名付きの機能を使用できます。
K<S> Function<K<_>, S, T>(K<T> arg)
K<_>
それ自体がそのような型である場合List<_>
、型パラメーターがあります。この「部分型」は、型コンストラクターとして知られています。
私の質問は、なぜこの能力が必要なのですか?List<T>
すべてList<T>
がほぼ同じであるが、すべてK<_>
が完全に異なる可能性があるため、次のような型を持つことは理にかなっています。共通の機能をまったく持たないOption<_>
とを持つことができますList<_>
。
Functor
Luis Casillasの答えの例は非常に直感的です。何がList<T>
とOption<T>
共通しているの?あなたが私に1つと機能T -> S
を与えるならば、私はあなたにList<S>
またはを与えることができますOption<S>
。彼らが共通しているもう一つのことはT
、両方から価値を得ようとすることができるということです。
IReadableHolder<T>
。
IMappable<K<_>, T>
方法でK<S> Map(Func<T, S> f)
として実装し、IMappable<Option<_>, T>
、IMappable<List<_>, T>
。したがってK<T> : IMappable<K<_>, T>
、それを使用するには制約が必要です。