module Main where

import qualified GHC

import qualified DynFlags
import qualified Packages
import qualified PackageConfig
import qualified Outputable

-- edit this to point to your ghc installation directory
myGhcRoot = "/usr/local/lib/ghc-6.6"

main = GHC.defaultErrorHandler DynFlags.defaultDynFlags $ do
         putStrLn "Starting"
         session <- GHC.newSession GHC.Interactive $ Just myGhcRoot
         dflags1 <- GHC.getSessionDynFlags session
         (dflags2, packageIds) <- Packages.initPackages dflags1
         GHC.setSessionDynFlags session dflags2{GHC.hscTarget=GHC.HscInterpreted}
         putStrLn "New session defined"
         let preludeModule = GHC.mkModule (PackageConfig.stringToPackageId "base") 
                                          (GHC.mkModuleName "Prelude")
         GHC.setContext session [] [preludeModule]
         putStrLn "Context set"
         let stmt1 = "let n = 2 + 2"
         runResult <- GHC.runStmt session stmt1
         putStrLn $ "Result is " ++ case runResult of
                                      GHC.RunOk names -> "OK: " ++ (Outputable.showSDoc $ 
                                                                    Outputable.ppr names)
                                      _               -> "Failed"
