【发布时间】:2013-03-27 07:51:03
【问题描述】:
我正在尝试动态加载和执行模块,
下面是我的代码
TestModule.hs
module TestModule
where
evaluate = "Hello !!!"
调用.hs
module Invoke
where
import GHC
import DynFlags
import GHC.Paths (libdir)
import Unsafe.Coerce (unsafeCoerce)
import Data.Dynamic
execFnGhc :: String -> String -> Ghc a
execFnGhc modname fn = do
mod <- findModule (mkModuleName modname) Nothing
--setContext [IIModule mod]
GHC.setContext [ GHC.IIDecl $ (GHC.simpleImportDecl . GHC.mkModuleName $ modname) {GHC.ideclQualified = True} ]
value <- compileExpr (modname ++ "." ++ fn)
let value' = (unsafeCoerce value) :: a
return value'
Main2.hs
import GHC.Paths (libdir)
import GHC
import Invoke
-- import TestModule
main :: IO ()
main = runGhc (Just libdir) $ do
str <- execFnGhc "TestModule" "evaluate"
return str
当我尝试运行程序时,它会显示以下错误
[root@vps mypproj]# ./Main2
Main2: <command line>: module is not loaded: `TestModule' (./TestModule.hs)
不知道我错过了什么,有人可以帮我解决这个错误
【问题讨论】:
-
我对此知之甚少,但您似乎可以使用 plugins 包更轻松地做到这一点。
标签: haskell ghc dynamic-loading