Pregunta ¿Debo usar extensiones GHC Haskell o no?


Mientras estoy aprendiendo Haskell, veo que hay una gran cantidad de extensiones de lenguaje utilizado en el código de la vida real. Como principiante, ¿debería aprender a usarlos o debería evitarlos a toda costa? Veo que rompe la compatibilidad con Haskell 98 y limita el código a prácticamente GHC solamente. Sin embargo, si busco paquetes en Hackage, veo que la mayoría de ellos son solo GHC de todos modos.

Entonces, ¿cuál es una actitud de comunidad hacia el uso de extensiones de lenguaje?

Y si el uso de extensiones está bien, ¿cómo puedo distinguir las extensiones que puedo usar de forma "segura" (aquellas que probablemente formen parte del próximo estándar Haskell) de aquellas que son en su mayoría "experimentales"? Por ejemplo, supongo que -XDisambiguateRecordFields es agradable y útil, pero ¿es probable que sea compatible en el futuro?


75
2018-04-29 10:39


origen


Respuestas:


Hay algunas extensiones de GHC que son demasiado buenas para vivir sin ellas. Entre mis favoritos están

  • Clases de tipo multiparámetro
  • Variables de tipo de ámbito
  • Tipos de rango superior
  • Tipos de datos algebraicos generalizados (GADT)

De estos, el más importante es el de las clases de tipo multiparámetro.

Algunas extensiones de GHC son muy especulativas y experimentales, y es posible que desee utilizar con precaución. Una buena forma de identificar una extensión estable y confiable es ver si está programado para su inclusión en Haskell Prime, que se espera sea el sucesor del Haskell 98.

Apoyo la sugerencia de Don Stewart de que cada extensión debe marcarse usando el LANGUAGE pragma en el archivo de origen. No lo hagas habilitar extensiones usando opciones de línea de comandos.


69
2018-04-29 23:07



Sí, use extensiones según corresponda.

Pero asegúrese de habilitarlos intencionalmente - solo cuando decides que los necesitas. Haz esto por cada módulo a través de {-# LANGUAGE Rank2Types #-} (por ejemplo).


51
2018-04-29 16:13



En general, las personas usan extensiones de GHC bastante, porque son muy útiles y Haskell 98 es bastante viejo. Una vez que haya un estándar más actualizado, las personas pueden hacer más esfuerzos para cumplirlo.

Puede encontrar el estado de las propuestas para el próximo estándar aquí.


19
2018-04-29 12:39



Las otras respuestas aquí son buenas. Yo añadiría que las extensiones de GHC no son tan vulnerables en el futuro (*) como podrían ser, porque GHC parece ser de lejos el compilador de Haskell más popular, y no creo que eso cambie pronto.

(*) como opuesto a "a prueba de futuro"


4
2018-05-02 18:31