Haskell 如何将库或前奏导入GHC.runGhc运行的上下文中

Haskell 如何将库或前奏导入GHC.runGhc运行的上下文中,haskell,ghc,Haskell,Ghc,我试图用GHC.dynCompileExpr评估一些动态代码,如下所示 module Main where import Data.Dynamic import GHC import GHC.Paths as GHP import GHC.Types import GHC.Prim import GHC.Num main :: IO () main = do dynval <- GHC.runGhc (Just GHP.libdir) $ do setSessionDynF

我试图用GHC.dynCompileExpr评估一些动态代码,如下所示

module Main where

import Data.Dynamic
import GHC
import GHC.Paths as GHP
import GHC.Types
import GHC.Prim
import GHC.Num

main :: IO ()
main = do
  dynval <- GHC.runGhc (Just GHP.libdir) $ do
    setSessionDynFlags =<< getSessionDynFlags
    GHC.dynCompileExpr "[3,2,4,0]::Integer"
  let val = fromDynamic dynval :: Maybe [Integer]
  putStrLn $ show val

然而,当我运行它时,它失败了,错误是:不在范围内:类型构造函数或类“Integer”。在GHC.dynCompileExpr运行的上下文中,似乎没有可用的库,甚至前奏也没有。如何将库或前奏曲导入到该上下文中?在GHC.dyncompilexpr中包含import语句只会导致解析错误

我花了一段时间才弄明白,但我似乎已经找到了让它发挥作用的方法

module Main where

import Data.Dynamic
import GHC
import GHC.Paths ( libdir )
import GHC.Types
import GHC.Prim
import GHC.Num
import DynFlags

main :: IO ()
main = do
  dynval <- GHC.runGhc (Just libdir) $ do
    dflags <- getSessionDynFlags
    setSessionDynFlags dflags
    setContext [ IIDecl $ simpleImportDecl (mkModuleName "Prelude") ]
    GHC.dynCompileExpr "[3, 2, 1, 0] :: [Prelude.Integer]"
  let val = fromDynamic dynval :: Maybe [Integer]
  putStrLn $ show val
这会将前奏带入上下文,并正确计算表达式,给出输出:

Just [3,2,1,0]

我从你那里得到这个密码。我希望这有帮助

我花了一段时间才弄明白,但我似乎已经找到了让它发挥作用的方法

module Main where

import Data.Dynamic
import GHC
import GHC.Paths ( libdir )
import GHC.Types
import GHC.Prim
import GHC.Num
import DynFlags

main :: IO ()
main = do
  dynval <- GHC.runGhc (Just libdir) $ do
    dflags <- getSessionDynFlags
    setSessionDynFlags dflags
    setContext [ IIDecl $ simpleImportDecl (mkModuleName "Prelude") ]
    GHC.dynCompileExpr "[3, 2, 1, 0] :: [Prelude.Integer]"
  let val = fromDynamic dynval :: Maybe [Integer]
  putStrLn $ show val
这会将前奏带入上下文,并正确计算表达式,给出输出:

Just [3,2,1,0]
我从你那里得到这个密码。我希望这有帮助