使用 GHC.runGhc 失败,错误:"Failed to load interface for ‘GHC.Types’ no unit id matching ‘ghc-prim’ was fou



我有以下代码,它尝试通过调用 GHC API 在运行时编译和打印一个简单的表达式:

module Main where
import GHC
import GHC.Paths as GHP
import GHC.Types
import GHC.Prim
main :: IO ()
main = do
val <- GHC.runGhc (Just GHP.libdir) $ GHC.compileExpr "HelloWorld"
putStrLn $ show val

当我尝试通过首次编译或直接在 GHCI 中运行它时,它失败并出现运行时错误:

无法加载"GHC"的接口。类型'

未找到与"GHC-prim"匹配的设备 ID

我需要做什么来避免此错误?

我尝试过使用 GHC 8.6 和 8.8,都遇到了问题。我在一个新的堆栈项目中运行它,只安装了ghcghc-primghc-paths

您需要调用setSessionDynFlags来读取包数据库。 如果将main的定义修改为:

main = do
val <- GHC.runGhc (Just GHP.libdir) $ do
setSessionDynFlags =<< getSessionDynFlags
GHC.compileExpr "HelloWorld"
putStrLn $ show val

然后它会生成异常:

Data constructor not in scope: HelloWorld

我想,这就是您期望尝试编译表达式HelloWorld.

相关内容

  • 没有找到相关文章

最新更新