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