一些语言允许带有类型参数的类和函数(例如,List<T>其中T可能是任意类型)。例如,您可以具有以下功能:
List<S> Function<S, T>(List<T> list)
但是,某些语言允许将此概念扩展到更高一级,从而使您可以使用带有签名的功能:
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>有什么共同点?如果您给我一个函数,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>使用它。