一些语言允许带有类型参数的类和函数(例如,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>
使用它。