Этот вопрос предназначен для людей, которые знают как 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);
}