¿Debo usar extensiones GHC Haskell o no?

78

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

Entonces, ¿cuál es la actitud de la 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 se convertirán en parte del próximo estándar Haskell) de aquellas que son en su mayoría "experimentales"? Por ejemplo, supongo que -XDisambiguateRecordFields es bueno y útil, pero ¿es probable que sea compatible en el futuro?

Sastanin
fuente
Personalmente, no me preocupo por esta compatibilidad; GHC es tan bueno que es convencional, incluso para las personas que simplemente se niegan a ajustarse a una corriente principal (Haskellers).
MasterMastic

Respuestas:

70

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

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

De estos, el realmente esencial son las clases de tipos multiparámetros.

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

Apoyo la sugerencia de Don Stewart de que todas las extensiones deben marcarse usando el LANGUAGEpragma en el archivo fuente. No habilite extensiones usando opciones de línea de comandos.

Norman Ramsey
fuente
2
¡Gracias! Evitaré las opciones de la línea de comandos para habilitar extensiones.
Sastanin
51

Sí, use extensiones según corresponda.

Pero asegúrese de habilitarlos intencionalmente , solo cuando decida que los necesita. Haga esto por módulo a través de {-# LANGUAGE Rank2Types #-}(por ejemplo).

Don Stewart
fuente
19

En general, la gente usa mucho las extensiones GHC, porque son muy útiles y Haskell 98 es bastante antiguo. 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í .

GS - Discúlpate con Monica
fuente
Gracias por la respuesta y por el enlace. Supongo que la propuesta rechazada debe evitarse.
Sastanin
Bueno, puede haber una amplia gama de razones para el rechazo, así que si realmente quieres usar algo, investiga un poco más en los detalles. Pero es una buena regla general.
GS - Disculparse con Monica
5

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

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

Phil Darnowsky
fuente