Using GHC.runGhc fails with error: "Failed to load interface for ‘GHC.Types’ no unit id matching ‘ghc-prim’ was found"

Using GHC.runGhc fails with error: "Failed to load interface for ‘GHC.Types’ no unit id matching ‘ghc-prim’ was found"

我有以下代码,它试图通过调用 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 中,它都失败并出现 运行 时间错误:

Failed to load interface for ‘GHC.Types’

no unit id matching ‘ghc-prim’ was found

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

我试过 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.

时所期望的结果