HaskellからRubyを呼んでみる(1)

FFIを使ってHaskellからRubyを呼んでみました。ruby_optionsが上手く動かなかった(まだソース読んでません)ので、とりあえず文字列をevalするだけですが… それはそれとしてruby-1.8.5のmingw版はバイナリがないのかな?
ファイル: ruby_test.hs

module Main (main) where

import Foreign.C

foreign import ccall unsafe "ruby_init" rubyInit :: IO ()
foreign import ccall unsafe "rb_eval_string" cRubyEvalString :: CString -> IO ()

rubyEvalString s = withCString s cRubyEvalString

main :: IO ()
main = do
  rubyInit
  rubyEvalString "puts 'Hello, world!!'"
  rubyEvalString "[1, 2, 3, 4, 5].each {|i| puts i }"

実験手順
1. http://ftp.ruby-lang.org/pub/ruby/binaries/mingw/1.8/からruby-1.8.4-i386-mingw32.tar.gzをダウンロードして、libmsvcrt-ruby18-static.aを取り出します。
2. 上のファイルruby_test.hsとlibmsvcrt-ruby18-static.aを同じディレクトリに置きます。
3. 以下のコマンドでコンパイルします。

$ ghc -W -ffi -o ruby_test ruby_test.hs libmsvcrt-ruby18-static.a

4. できあがったプログラムを実行します。

$ ./ruby_test.exe
Hello, world!!
1
2
3
4
5

参照: http://takahr.dhis.portside.net/cgi-bin/rwiki.cgi?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DFRuby