[Haskell-cafe] using ghc as a library

Anatoly Yakovenko aeyakovenko at gmail.com
Sat Oct 25 18:39:18 EDT 2008

so I am trying to figure out how to use ghc as a library.  following
this example, http://www.haskell.org/haskellwiki/GHC/As_a_library, i
can load a module and examine its symbols:

module Main where

import GHC
import GHC.Paths ( libdir )
import DynFlags ( defaultDynFlags )
import System.Environment
import Data.Maybe
import Outputable

main = do
   args <- getArgs
   let file = head $ args
   rv <- defaultErrorHandler defaultDynFlags $ do
      runGhc (Just libdir) $ do
         dflags <- getSessionDynFlags
         setSessionDynFlags dflags
         target <- guessTarget file Nothing
         setTargets [target]
         load LoadAllTargets
         gr <- getModuleGraph
         mi <- getModuleInfo $ ms_mod $ head $ gr
         return $ fromJust $ mi
   print $ showSDoc $ ppr $ modInfoInstances $ rv
   print $ showSDoc $ ppr $ modInfoExports $ rv

given Test.hs:

module Test where

hello = "hello"
world = "world"
one = 1
two = 2

i get this output:

$ ./Main ./Test.hs
"[Test.hello, Test.one, Test.two, Test.world]"

which is what i expect.  My question is, how do manipulate the symbols
exported by Test?  Is there a way to test the types?  lets say i
wanted to sum all the numbers and concatenate all the strings in
Test.hs, how would i do that?

More information about the Haskell-Cafe mailing list