Sonuç değerlendirmek ve yazdırmak için ghci'ye api aracılığıyla bir ifade göndermenin en basit örneği ne olurdu? Çalışacak tam bir örnek bulamıyorum. Evet, https://wiki.haskell.org/GHC/As_a_library'u denedim ancak çok fazla şey söylemeyen hatalar almaya devam ediyorum: no package state yet: call GHC.setSessionDynFlags
. Hangi argümanlarla olursa olsun setSessionDynFlags
'u veya setContext
'u nerede denerim, her zaman bir hatayla sonuçlanırım. Şu anda (hayır setXYZ
) var:GHC'yi kitaplık olarak kullanma
runGhc (Just libdir)
çalıştırmak
GHC
ifadenin başına bu başlatma eklendiğinde kadar sorun çözüldü
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
Sen ilginizi çekebilir https : //hackage.haskell.org/package/hint – arrowd
Teşekkürler, bu gerçekten çok ilginç görünüyor! :) – jakubdaniel