Próbuję załadować i uruchomić moduł dynamicznie,GHC 7.4.2 dynamicznie wywołanie moduły
Poniżej jest mój kod
TestModule.hs
module TestModule
where
evaluate = "Hello !!!"
Invoke.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
Kiedy próbuję uruchomić program, to pokaż mi poniżej błędu
[[email protected] mypproj]# ./Main2
Main2: <command line>: module is not loaded: `TestModule' (./TestModule.hs)
Nie wiem, czego mi brakuje, Czy ktoś mógłby mi pomóc rozwiązać ten problem
Nie wiem zbyt wiele na ten temat, ale wygląda na to, że można to zrobić znacznie łatwiej dzięki [wtyczkom] (http: //hackage.haskell. pakiet org/pakiet/wtyczki). – Almanildo