2012-03-04 24 views
12

He actualizado GHC hoy y mi pequeño programa dejó de funcionar:GHC 7.4 actualización rompe haskell98?

https://github.com/BrisFunctional/misere-oxo/blob/master/OXO/misere.hs

GHC es ahora la versión 7.4.1-2 y de lo que he conseguido entender ahora por defecto a haskell2010 estándar, en lugar de haskell98. (Que puedo ver desde la salida de la lista de GHC-PKG):

haskell2010-1.1.0.1 
(haskell98-2.0.0.1) 

así que cambié mi "Lista de importación" a "Data.List importación", que yo pensaba que era el único problema, pero ahora me sale el siguiente :

misere.hs:1:1: Not in scope: `System.Environment.withArgs' 

¿de dónde viene eso porque nunca importé System.Environment? ¿Alguna pista? Gracias

EDIT: He actualizado la versión en github para reflejar este error. y realmente el uso de Data.List ghc compila el archivo perfectamente, así que es runhaskell el que genera este problema.

+1

¿Has intentado compilar con 'ghc -XHaskell98'? – nominolo

+0

esa opción no existe en mi ghc, en realidad estaba buscando algo similar .. –

Respuesta

14

No sólo es necesario cambiar List a Data.List, sino también Random a System.Random e importar getArgs de System.Environment (pero por el momento, el código utiliza ni getArgs ni nada de System.Random, por lo que por el momento, también puede eliminar los importaciones).

Los antiguos módulos no jerárquicos solo son accesibles desde el paquete haskell98, que ya no es compatible con base. Esto significa que el uso de los módulos haskell98 también requiere que se oculte explícitamente base en la línea de comandos o que no se incluya base en el campo de dependencias del archivo .cabal.

Estoy un poco sorprendido por el mensaje de error, que sería de esperar que diga

Could not find module `System' 
It is a member of the hidden package `haskell98-2.0.0.1'. 

pero esa diferencia puede ser un capricho de la runhaskell.

+0

Bueno, lo siento La versión que estaba en el enlace no es la misma en la que estaba trabajando realmente, presioné la versión actual en github y eso me hace ver el error antes. –

+0

Eso es extraño. No aparece ningún error al ejecutar la nueva versión, ya sea con runhaskell o directamente desde el shell, y no hay ningún motivo para ese error en el archivo. ¿Qué reporta 'runhaskell --version'? No es que espere nada más que 'runghc 7.4.1', pero me gustaría asegurarme. –

+0

Sí, obtengo exactamente esa versión, acabo de probar en otra máquina con la versión anterior de GHC, y todo funciona bien ... Tal vez intente reinstalar todos los paquetes relacionados con Haskell en mi Archlinux y vea si eso funciona . –

2

Primero, creo que usas System.Environment.withArgs debido a getArgs, que usa withArgs. Hackage.Haskell page for System.Environment

Pruebe importar withArgs también, y tal vez todo System.Environment.

En segundo lugar, podría ser el caso que List tenía más de Data.List ahora. Es posible que desee intentar incluir el total de Prelude en lugar de solo Data.List.

Y para responder a la pregunta en el encabezado, cada actualización de GHC extiende Haskell98. Y algunos pragmas de lenguaje incluso frenan algunos detalles de Haskell98. Pero la mayoría de los cambios en las bibliotecas causan problemas, y no las actualizaciones de GHC.

Espero haberle dado suficiente para resolver los problemas.

+0

Como escribí anteriormente estas cosas ya no son un problema, y ​​el programa compila bien, ese error proviene de runhaskell .. –

6

Si su programa es pura Haskell98 puede utilizar la siguiente invocación GHC:

ghc -package haskell98 -hide-package base 

A largo plazo, sin embargo, sería mejor si se ha actualizado al menos a los nombres de módulos jerárquicos. Use Hoogle para averiguar el nombre del módulo. Por ejemplo, http://www.haskell.org/hoogle/?hoogle=withArgs enumera System.Environment como el módulo de exportación.