Этот вопрос предназначен для людей, которые знают как Haskell (или любой другой функциональный язык, поддерживающий типы более высокого сорта), так и С++...
Можно ли моделировать более высокие типы типов с использованием шаблонов С++? Если да, то как?
EDIT:
Из эта презентация Тони Морриса:
Полиморфизм более высокого порядка:
-
Языки, такие как Java и С#, имеют полиморфизм первого порядка, поскольку они позволяют нам абстрагироваться от типов. например
List<A>
может иметь функциюreverse
который работает над любым типом элемента (A
). -
Дополнительные практические языки программирования и системы типов позволяют нам аннотация по конструкторам типа as хорошо.
-
Эта функция называется более высоким порядком (или более высокий) полиморфизм.
Пример:
Pseudo-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);
}