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,都遇到了问题。我在一个新的堆栈项目中 运行 安装它,只安装了 ghc
、ghc-prim
和 ghc-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
.
时所期望的结果
我有以下代码,它试图通过调用 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,都遇到了问题。我在一个新的堆栈项目中 运行 安装它,只安装了 ghc
、ghc-prim
和 ghc-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
.