2012-05-07 8 views
5

Después de actualizar a ghc 7.4, tuve que eliminar import System de varios scripts, pero eso los hace incompatibles con runhaskell de GHC 6.0, que todavía se usa en muchos entornos.runhaskell - cómo hacer un script compatible con ghc 7.4 y 6?

¿Hay alguna manera de admitir ambas versiones?

El mensaje que recibo cuando corro un guión con import System en GHC 7,4:

% ./script.hs 
    Could not find module `System' 
    It is a member of the hidden package `haskell98-2.0.0.1'. 
    Use -v to see a list of the files searched for. 
+3

¿Por qué todavía se usa GHC 6.0? Es a partir de 2003. –

+0

Diría, '{- # Language CPP # -}' con [las manipulaciones usuales] (http://hackage.haskell.org/packages/archive/containers/0.5.0.0/doc/html /src/Data-Graph.html), pero no creo que GHC-6.0 haya apoyado esa forma de escribirlo :) Tenga en cuenta que incluso los abrazos más recientes admiten el esquema jerárquico de nombres. – applicative

Respuesta

5

El módulo System era un módulo de compatibilidad de edad Haskell-98, y toda su funcionalidad se pueden encontrar en los módulos System.Cmd, System.Environment y System.Exit, todos que han estado disponibles desde al menos tan lejos como GHC 5.04, por lo que debe haber una simple cuestión de simplemente arreglar sus declaraciones de importación para usar algún subconjunto apropiado de esos módulos en su lugar.

+0

Estaba usando 'System.Process' para importar' system'; 'System.Cmd' es la forma compatible, gracias! – Penz

6

El módulo System es un no jerárquica módulo desuso Haskell 98; debe importar los módulos jerárquicos relevantes (como System.Environment, System.IO y System.Exit; consulte el base package para obtener una lista completa) que necesita. La forma más sencilla de lograr esto podría ser simplemente eliminar la importación System, y usar Hoogle para descubrir en qué módulos están las definiciones que necesita, a partir de los errores del compilador.

En los GHC antiguos, los módulos Haskell 98 podrían usarse en conjunto con los módulos jerárquicos, pero esto ya no es posible. Cambiar las importaciones debería ser relativamente fácil y actualizará su programa con el último estándar Haskell 2010.

Cuestiones relacionadas