Höherwertige Typen mit C ++

Diese Frage richtet sich an Personen, die sowohl Haskell (oder eine andere funktionale Sprache, die höherwertige Typen unterstützt) als auch C ++ kennen ...

Ist es möglich, Typen höherer Klassen mithilfe von C ++ - Vorlagen zu modellieren? Wenn ja, wie?

EDIT:

VonDie Präsentation von Tony Morris:

Polymorphismus höherer Ordnung:

Sprachen wie Java und C # haben einen Polymorphismus erster Ordnung, weil sie es uns ermöglichen, über Typen zu abstrahieren. z.B.List<A> kann ein @ habreverse -Funktion, die für jeden Elementtyp funktioniert (dasA).

Mehr praktische Programmiersprachen und Typsysteme ermöglichen es uns, auch über Typkonstruktoren zu abstrahieren.

Diese Funktion wird als Polymorphismus höherer Ordnung (oder höherwertiger) bezeichnet.

Beispiel:

Pseudo-Java mit einer erfundenen Notation für Polymorphismus höherer Ordnung

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);
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage