Типы высшего класса с 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);
}

Ответы на вопрос(2)

Ваш ответ на вопрос