这个问题适用于同时了解 Haskell(或任何其他支持高级类型的函数式语言)和 C++ 的人......
是否可以使用 C++ 模板对更高种类的类型进行建模?如果是,那么如何?
编辑 :
从托尼莫里斯的这个演讲中:
高阶多态性:
Java 和 C# 等语言具有一阶多态性,因为它们允许我们对类型进行抽象。例如
List<A>
,可以具有reverse
适用于任何元素类型(的A
)的功能。更实用的编程语言和类型系统也允许我们对类型构造函数进行抽象。
该特征称为高阶(或更高种类)多态性。
例子 :
具有发明的高阶多态性表示法的伪 Java
interface Transformer<X, Y> {
Y transform(X x);
}
interface Monad<M> { // M :: * -> *
<A> M<A> pure(A a);
<A, B> M<B> bind(Transformer<A, M<B>> t, M<A> a);
}