Я новичок в Haskell и пытаюсь использовать динамическую загрузку в пакете 'plugins'. Я заблудился. Вот минимальная программа с двумя файлами.
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)
и Plug.hs:
module Plug (thing) where
thing :: Integer
thing = 1234000
Я компилирую Plug с помощью ghc -c Plug.hs
, который создает Plug.o. Затем я компилирую Main.hs с помощью ghc -o Main Main.hs
и запускаю Main. Я также пытаюсь заменить load
на dynload
и запустить с runhaskell
. Только одна из этих четырех комбинаций работает. Что я делаю не так?
dynload
load
Я использую Mac OS X. GHC версии 7.0.2. Что я делаю не так?
спасибо,
Роб
Я могу исправить скомпилированный dynload
, изменив Plug.hs на следующий ...
module Plug (thing) where
import Data.Dynamic
thing :: Dynamic
thing = toDyn (1234000::Integer)
Было бы хорошо, если бы он не выделял ошибку при ошибке. Думаю, в Plug.o недостаточно метаданных, чтобы проверить тип. В любом случае, это оставляет случаи runhaskell
. Я зарегистрировал ошибку для них.