Ví dụ đơn giản nhất là gửi biểu thức tới ghci thông qua api của nó để đánh giá và in kết quả là gì? Tôi không thể tìm thấy một ví dụ hoàn chỉnh có thể hoạt động. Có, tôi đã thử https://wiki.haskell.org/GHC/As_a_library nhưng tôi vẫn gặp lỗi mà không cho tôi biết nhiều: no package state yet: call GHC.setSessionDynFlags
. Bất cứ nơi nào tôi thử setSessionDynFlags
với bất kỳ đối số nào, hoặc setContext
, tôi luôn kết thúc với một lỗi. Tôi hiện có (không setXYZ
):Sử dụng GHC làm thư viện
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
Bạn có thể quan tâm https : //hackage.haskell.org/package/hint – arrowd
Cảm ơn bạn, điều đó thực sự có vẻ rất thú vị! :) – jakubdaniel