通过api将表达式发送到ghci进行评估和打印结果的最简单的例子是什么?我无法找到一个可行的完整示例.是的,我已经尝试了https://wiki.haskell.org/GHC/As_a_library,但我一直收到的错误并没有告诉我多少:no package state yet: call GHC.setSessionDynFlags
.无论我setSessionDynFlags
在哪里尝试任何参数,或者setContext
,我总是以错误结束.我目前有(不setXYZ
):
import GHC
import GHC.Paths ( libdir )
import GhcMonad
import Debugger
import DynFlags
import Outputable
import Language.Haskell.HsColour
import Language.Haskell.HsColour.Colourise
colour :: String -> String
colour = hscolour TTY defaultColourPrefs True True "" False
ghci :: IO ()
ghci = runGhc (Just libdir) $ do
r <- runStmt "[1, 2, 3]" RunToCompletion
case r of
RunOk ns -> do
mapM_ ( \n -> do
mty <- lookupName n
case mty of
Just (AnId id) -> do
t <- obtainTermFromId maxBound True id
fl <- getSessionDynFlags
liftIO $ putStrLn $ colour $ show $ withPprStyleDoc fl defaultUserStyle $ ppr t
return ()
otherwise -> return ()
) ns
otherwise -> return ()
main :: IO ()
main = ghci
Run Code Online (Sandbox Code Playgroud)
GHC
因此,当我在运行的表达式的开头添加此初始化时,我的问题得到了解决runGhc (Just libdir)
:
df <- getSessionDynFlags
setSessionDynFlags $ df { hscTarget = HscInterpreted
, ghcLink = LinkInMemory
}
setContext $ map (IIDecl . simpleImportDecl . mkModuleName) [ "Prelude" ]
Run Code Online (Sandbox Code Playgroud)