2009-04-29 19 views
75

Como estoy aprendiendo Haskell, veo que hay un montón de language extensions 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 solo GHC. Sin embargo, si busco paquetes en Hackage, veo que la mayoría de ellos son solo GHC de todos modos.¿Debo usar extensiones GHC Haskell o no?

Entonces, ¿cuál es la actitud de la comunidad hacia el uso de extensiones de idioma?

Y si el uso de extensiones está bien, ¿cómo puedo distinguir las extensiones que puedo usar "con seguridad" (aquellas que probablemente pasarán a formar 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?

+0

Personalmente, no me preocupa esta compatibilidad; GHC es tan bueno que es la corriente principal, incluso para las personas que simplemente se niegan a conformarse con una corriente principal (Haskellers). – MasterMastic

Respuesta

69

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

  • Multiparámetro clases de tipo
  • variables de tipo Scoped
  • Superior de rango
  • tipos de datos algebraicos generalizados (GADTs)

De estos el uno realmente esencial es multiparamétrico tipo clases.

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 de Haskell 98.

Sugiero que Don Stewart sugiera que cada extensión se marque con el LANGUAGE pragma en el archivo de origen. No habilite extensiones utilizando opciones de línea de comandos.

+2

¡Gracias! Evitaré las opciones de línea de comandos para habilitar extensiones. – sastanin

+0

No me puedo imaginar que no tenga clases de tipos de parámetros múltiples o tipos de clasificación superior. – alternative

+6

¿No debería actualizarse esta respuesta para Haskell 2010? – Henrik

19

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 la siguiente norma here.

+0

Gracias por la respuesta y por el enlace. Supongo que la propuesta rechazada debe evitarse. – sastanin

+0

Bueno, puede haber una amplia gama de razones para el rechazo, por lo que si realmente quiere usar algo, profundice un poco más en los detalles. Pero es una buena regla general. –

51

Sí, use extensiones según corresponda.

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

4

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"