Мне потребовалось некоторое время, чтобы понять, но я, похоже, нашел способ заставить его работать.
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
Решение выглядит следующим образом:
setContext [ IIDecl $ simpleImportDecl (mkModuleName "Prelude") ]
Это выводит Prelude в контекст, и выражение корректно вычисляется, давая вывод:
Just [3,2,1,0]
Я получил этот код от здесь . Надеюсь, это поможет!