Pregunta

Cuando se trabaja con casos derivados en Haskell, es posible derivar funciones para tipos arbitrarios, o estamos restringidos a funciones particulares?

¿Fue útil?

Solución

Puede derivar los casos de las siguientes clases de Haskell. 98: Eq, Ord, Enum, Ix, limitada, Leer y Mostrar

El uso de extensiones de GHC también se puede derivar casos de las siguientes clases: tipificables, datos, Functor, plegable y atravesables. También hay una extensión GHC que permite a un newtype para derivar casos de su tipo de aplicación.

No se puede derivar instancias de clases arbitrarias por la sencilla razón de que Haskell no sabría cómo generar las funciones necesarias sin conocimientos especiales acerca de la clase en cuestión.

Otros consejos

se limitan a clases particulares, en términos de lo que el compilador sabe cómo derivar para usted. El uso de un preprocesador o Plantilla Haskell, puede codificar a sí mismo nuevos mecanismos que se derivan, si usted sabe de enfoques generales para ceder implementaciones de funciones para tipos particulares.

Las otras dos respuestas son correctas. Pero si usted necesita más, hay algunos paquetes en hackage que puede manejar más. Me gusta Data.Derive mucho, ya que se puede generar el código fuente directamente (por compatibilidad) o engancharlo en Plantilla Haskell hacerlo en tiempo de compilación. Una amplia gama de clases ya son compatibles, y es muy fácil de añadir soporte para su propio. lanzamiento de publicidad para una maldita buena biblioteca: Resumen -)

Para añadir a la respuesta de Don: derivar funcionalidad personalizada para los tipos de datos se llama programación genérica y hay una gran cantidad de la literatura sobre este . Preprocesadores y Plantilla Haskell no son las únicas soluciones; ver uno de los documentos de información general que la lista de la literatura para otras opciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top