我发现了这个blog post,我正在玩一些示例代码。
我已将第一个示例修改为如下所示:
main = defaultErrorHandler defaultFatalMessager defaultFlushOut $ do
runGhc (Just libdir) $ do
dflags <- getSessionDynFlags
setSessionDynFlags $ dflags { hscTarget = HscInterpreted
, ghcLink = LinkInMemory
}
setTargets =<< sequence [guessTarget "test.hs" Nothing]
load LoadAllTargets
setContext [IIModule $ mkModuleName "Test"]
!act <- unsafeCoerce <$> compileExpr "print test"
setTargets []
load LoadAllTargets
liftIO act
这恰好起作用,但这看起来并不安全 - 对我而言,这似乎是我使用模块i中的符号卸载。这会在非平凡的情况下起作用吗?