RubyからHaskellを呼び出すライブラリ

RubyからHaskellを呼び出すライブラリ、Rubiskellを作ってみた - Greenbear Diary
yharaさん、GJです。
runghcはお手軽でよいのですが、Rubyの拡張ライブラリとしてHaskellを直接組込めないものでしょうか? この辺の技術を組み合わせればできそうな気がしますが、あまりにマニアックすぎて僕はよく知りません。

とりあえずフィボナッチをコンパイルして実行するコード。んー、上のドキュメントとGHCのソースを読みながら書いてみたのですが、まだまだ謎な部分が多いです。GHC.runStmtの後でバインドされてる値を取り出すのはどうやるんだろう。。。
ファイル: a.hs

module Main (main) where

import qualified GHC
import qualified DynFlags
import qualified PackageConfig

ghcHandler :: IO a -> IO ()
ghcHandler f = GHC.defaultErrorHandler DynFlags.defaultDynFlags f >> return ()

ghcInit :: FilePath -> [(String, String)] -> IO GHC.Session
ghcInit path modules = do
  session <- GHC.newSession $ Just path
  GHC.setSessionDynFlags session =<< GHC.getSessionDynFlags session
  GHC.setContext session [] $ map f modules
  return session
      where
        f (pkg, name) = GHC.mkModule (PackageConfig.stringToPackageId pkg) 
                        (GHC.mkModuleName name) 

ghcRun :: GHC.Session -> String -> IO GHC.RunResult
ghcRun session stmt = GHC.runStmt session stmt GHC.RunToCompletion

main :: IO ()
main = ghcHandler $ do
         session <- ghcInit "C:\\ghc\\ghc-6.8.1" [("base", "Prelude")]
         ghcRun session "let fib n | n == 0 = 0 | n == 1 = 1 | True = fib (n - 2) + fib (n - 1)"
         ghcRun session "fib 10"

実行例:

>ghc -package ghc a.hs
>main
55

参照: