Tipos de tipo superior con C ++
Esta pregunta es para las personas que conocen tanto Haskell (o cualquier otro lenguaje funcional que admita tipos de tipo superior) como C ++ ...
¿Es posible modelar tipos superiores con plantillas C ++? ¿Si es así, entonces cómo?
EDITAR:
Deesta presentación de Tony Morris:
Polimorfismo de orden superior:
Lenguajes como Java y C # tienen polimorfismo de primer orden porque nos permiten abstraer en tipos. p.ej.List<A>
puede tener unreverse
función que funciona en cualquier tipo de elemento (elA
)
Los lenguajes de programación más prácticos y los sistemas de tipos nos permiten también abstraernos en constructores de tipos.
Esta característica se llama polimorfismo de orden superior (o de tipo superior).
Ejemplo:
Pseudo-Java con una notación inventada para polimorfismo de orden superior
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);
}