いくつかの言語は、(例えば、型パラメータを持つクラスおよび機能を可能にする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<_>。
FunctorLuis 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>、それを使用するには制約が必要です。