使用GHC.runGhc失败,并显示错误:“无法为'GHC.Types'加载接口,找不到与'ghc-prim'相匹配的单位ID”

问题描述 投票:0回答:1

我有以下代码,该代码通过调用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.Types”的界面

找不到与“ ghc-prim”匹配的单位ID

为了避免此错误,我该怎么办?

我已经尝试使用GHC 8.6和8.8,但都遇到了问题。我正在仅安装ghcghc-primghc-paths的新堆栈项目中运行它。

haskell ghc
1个回答
1
投票

您需要调用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所期望的。

© www.soinside.com 2019 - 2024. All rights reserved.