Todavía puede usar extensions: DeriveFunctor
en su archivo .cabal. Sí, no es una extensión conocida actualmente por Cabal, pero aún puede usarla y, siempre que el compilador la reconozca, funcionará. De hecho, Cabal verificará que el compilador reconozca la extensión, aunque Cabal no lo sepa.
Hay un registro central de extensiones en el módulo Language.Haskell.Extension
. El objetivo de este registro es que los diferentes compiladores puedan ponerse de acuerdo sobre los mismos nombres cuando implementan las mismas extensiones. Hemos tenido casos en el pasado donde los autores de diferentes compiladores accidentalmente han dado diferentes nombres al mismo concepto de extensión. No todas las extensiones deben registrarse. Tiene sentido no registrar extensiones que todavía son muy experimentales, por ejemplo, las extensiones DPH "PArr" todavía no están registradas. Hackage requiere que todos los paquetes cargados utilicen solo extensiones registradas conocidas, lo cual tiene sentido ya que si una extensión está suficientemente lista para ser utilizada en un paquete distribuido, entonces es correcto registrarse.
En este caso particular, los desarrolladores de GHC parecen haber olvidado registrar la extensión.
También vale la pena señalar que a partir de Cabal-1.10 el campo extensions
se divide en dos: default-extensions
y other-extensions
. Esto aborda el problema que John señala en su respuesta, que el comportamiento anterior es que todas las extensiones están activas para todos los módulos, lo que reconocemos es un error. El campo other-extensions
permite enumerar las extensiones utilizadas en algunos módulos (es decir, con el pragma LANGUAGE
). Cabal eventualmente impone que están todos en la lista, al igual que requiere que todas las dependencias del paquete estén en la lista. Las dependencias de lenguaje también son dependencias.
¿Qué versión de GHC o Haskell Platform está usando> –
Se agregó más información de la versión. –
No conozco esta advertencia en particular, pero creo que agregar un pragma de IDIOMA dentro del archivo es la mejor opción. –