una reutilizacion que polimórficas polimorfismo polimorficas polimorfica funciones funcion codigo haskell polymorphism higher-kinded-types

haskell - que - reutilizacion de codigo



¿Cuáles son los usos de las clases polimórficas? (3)

¡Son útiles para definir funciones que operan sobre constructores de datos con aridad arbitraria, por supuesto!

Un ejemplo concreto podría ser una función que, dado un constructor de datos con aridad arbitraria, devuelve un nuevo constructor de datos que envuelve al constructor dado en Some ().

Los tipos polimórficos son una extensión del sistema de tipos de Haskell, supported por UHC, que permite

data A x y = A (y x)

para ser escrito (¿clasificado?) como a -> (a -> *) -> * . ¿Para qué sirven?


Un posible ejemplo de uso puede ser utilizar TypeCompose de TypeCompose para componer transformadores de mónada en un estilo sin puntos.

type MyT = StateT Foo :. MaybeT :. ContT Bar

(solo como ejemplo, no tengo idea de lo que uno va a hacer con esos foos y barras ...)

En lugar de:

type MyT m = StateT Foo (MaybeT (ContT Bar m))

(Esto tendría el mismo resultado aparte de newtype -wrappers)

Actualmente deberá duplicar el código de los combinadores para diferentes tipos, y esta extensión suprime la repetición y permite el uso de una pieza de código para gobernarlos a todos.


Añadiendo tipos polimórficos a GHC

El trasfondo de esta pregunta sería la motivación en general para un sistema de tipo más expresivo .

Es decir, la razón general para agregar tipos polimórficos a Haskell es mejorar la experiencia de la programación de nivel de tipo . Actualmente la programación de nivel de tipo en Haskell avanza en un nivel " kind " esencialmente sin tipo. Un lenguaje más rico hará que la programación de nivel de tipo en Haskell, en general, sea más fácil.

Un ejemplo más concreto sería eliminar la restricción tipificable (dinámica) de los genéricos del estilo SYB ( citation ), así como mejorar el soporte general para la programación genérica de tipo más alto.