Haskell 如何将库或前奏导入GHC.runGhc运行的上下文中
我试图用GHC.dynCompileExpr评估一些动态代码,如下所示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
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]
我从你那里得到这个密码。我希望这有帮助