plugins haskell dynamic-loading

plugins - Ayuda con la carga del complemento dinámico de Haskell



dynamic-loading (2)

Es posible que desee echar un vistazo a un problema similar con el GHC-API en haskell ghc dynamic compliation que solo funciona en la primera compilación.

Soy un principiante de Haskell, y estoy tratando de usar la carga dinámica en el paquete de ''complementos''. Estoy un poco perdido. Aquí hay un programa mínimo con dos archivos.

Main.hs:

module Main (main) where import System.Plugins main :: IO () main = do putStrLn "Loading" mv <- dynload "Plug.o" [] [] "thing" -- also try ''load'' here putStrLn "Loaded" case mv of LoadFailure msgs -> putStrLn "fail" >> print msgs LoadSuccess _ v -> putStrLn "success" >> print (v::Integer)

Y Plug.hs:

module Plug (thing) where thing :: Integer thing = 1234000

ghc -c Plug.hs Plug con ghc -c Plug.hs que produce Plug.o. Luego compilo Main.hs con ghc -o Main Main.hs , y ejecuto Main. También trato de reemplazar load con dynload , y correr con runhaskell . Solo una de estas cuatro combinaciones funciona. ¿Qué estoy haciendo mal?

  • con dynload
    • compilado → imprime "Cargado", luego seg fallos
    • runhaskell → imprime "Cargando", luego "Main.hs: Prelude.undefined"
  • con load
    • compilado → exitoso, imprime el entero
    • runhaskell → imprime "Cargando", se cuelga durante 5-10 segundos, desaparece

Estoy en Mac OS X. GHC versión 7.0.2. ¿Qué estoy haciendo mal?

Gracias,
Robar

Actualizar

Puedo arreglar el dynload compilado cambiando Plug.hs a lo siguiente ...

module Plug (thing) where import Data.Dynamic thing :: Dynamic thing = toDyn (1234000::Integer)

Sería bueno si no falla por error. Supongo que no tiene suficientes metadatos en Plug.o para verificar el tipo. De todos modos, eso deja los casos de runhaskell . Presenté un bug para esos.


He intentado su ejemplo en Ubuntu 10.10 con GHC 6.12.1 y los resultados son: tanto dynload como load con runhaskell o runhaskell fallado el error "Prelude.undefined", así que creo que debería informar un error a los desarrolladores .

No puedo ver ningún caso ni condición especial en la documentación de haddock su módulo, por lo que no creo que esté haciendo nada mal.