Rob*_*b N 18 plugins haskell dynamic-loading
我是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)
Run Code Online (Sandbox Code Playgroud)
和Plug.hs:
module Plug (thing) where
thing :: Integer
thing = 1234000
Run Code Online (Sandbox Code Playgroud)
我编译Plug with ghc -c Plug.hs产生Plug.o. 然后我用ghc -o Main Main.hs,编译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)
Run Code Online (Sandbox Code Playgroud)
如果它没有错误的错误,那将是很好的.我猜它在Plug.o中没有足够的元数据来检查类型.无论如何,这离开了runhaskell案件.我为那些人提出了一个错误.
我已经在 Ubuntu 10.10 和 GHC 6.12.1 下尝试过你的示例,结果是:两者都运行,dynload并且load运行都 complied 或 throughrunhaskell给我“Prelude.undefined”错误,所以我认为你应该向开发人员报告错误。
我在他们的模块的黑线鳕文档中看不到任何特殊情况或条件,所以我不认为你做错了什么。