yourself type sintaxis learn how functions else define haskell record

sintaxis - type definition haskell



¿Lista moderna? (1)

El paquete HList se basó en lo que ahora es la antigua tecnología Haskell. La pregunta simple es: dadas todas las maravillosas características del desarrollo de Haskell / GHC de los últimos 8 años, ¿se construiría un HList "moderno" de manera muy diferente? Me doy cuenta de que la respuesta aquí podría ser no , que para el caso particular de HList, la tecnología utilizada produce la solución más elegante.

He leído muchos de los elementos documentados en la página de registros extensibles , el único competidor real (es decir, uno que se implementa como una biblioteca disponible en hackage) es el paquete de registros . ¿O hay enlaces faltantes de los registros extensibles ?


La pregunta para cualquiera de estos paquetes es el alcance de sus objetivos. HList es en realidad 5 implementaciones diferentes de etiquetas, dos de igualdad de tipos, dos de tipo casting, dos de Record / RecordP y la opción Variant vs TIC. Todas son similares, pero son compromisos diferentes de facilidad de uso, portabilidad y extensiones utilizadas.

Las nuevas características de GHC (GADT, tipos asociados, tipos de restricciones, tipos polimórficos, tipos singleton) pueden permitir compensaciones ligeramente diferentes. En particular, los tipos singleton pueden permitir mejores etiquetas y los tipos polimórficos pueden permitir un Typeable / Data / Generics más elegante.

El paquete de "registros" al que se vincula depende del paquete de "tipos" que afirma:

"Haskell no tiene soporte para subkinds y polimorfismo de subkind. Sin embargo, este paquete puede usarse para emular subkinds de tipo * y variables de subkind".

Pero esto ya no es así gracias a la promoción del tipo de datos a tipos en las nuevas versiones de GHC. Así que este paquete de enero de 2012 puede estar algo obsoleto ahora.

En cuanto a los registros, quizás un nuevo sistema se basará en la última ronda de lentes polimórficas: lens y / o lens-family .