Quale sarebbe l'esempio più semplice di invio di un'espressione a ghci tramite la sua API per la valutazione e la stampa del risultato? Non sono in grado di trovare un esempio completo che funzioni. Sì, ho provato https://wiki.haskell.org/GHC/As_a_library ma continuo a ricevere errori che non mi dicono molto: no package state yet: call GHC.setSessionDynFlags
. Ovunque cerco setSessionDynFlags
con qualsiasi argomento, o setContext
, finisco sempre con un errore. Al momento ho (non setXYZ
):Utilizzo di GHC come libreria
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
potreste essere interessati a https : //hackage.haskell.org/package/hint – arrowd
Grazie, sembra davvero molto interessante! :) – jakubdaniel