RubyからHaskellの標準入力に渡して処理させて出力を読む

  • 学習効率を上げるために(本を読むだけではなく)実用的なコードを書きたい
    • 本読むだけだと「なるほどー。で、これどこで何に使えばいいの?」になりがち
  • とはいえアプリケーションを全部 Haskell で書くのはまだ無理

という訳でRubyからGroovyの標準入力に渡して処理させて出力を読むの焼き直しです。

これで「自宅で使ってる Ruby スクリプトのここの処理を Haskell に置き換えてみよう」みたいにできればいいなと。


foo.rb

# -*- coding: utf-8 -*-

def proc_by_haskell(haskell_program, str)
  IO.popen(%Q{runghc "#{haskell_program}"}, "r+"){|io|
    io.print str
    io.close_write
    io.read
  }
end

p proc_by_haskell("bar.hs", "foo\\nあ\n")
#=> "foo\\nあ\n_bar"

bar.hs

appendBar cs = cs ++ "_bar"

main = do cs <- getContents
          putStr(appendBar cs)