top page > computer > haskell > web_lecture > for_programmer > bot_oneliner.html
更新日:
文責: 重城良国

ボットを作る: Haskellのワンライナー

(工事中 30%)

GHCでワンライナーを実行する

GHCでワンライナーを実行するにはghcの-eオプションを使う。

% ghc -e "product [1 .. 10]"
3628800

標準入力からの入力を変換して標準出力に出すにはinteractを使う。

% echo 'hello' | ghc -e 'interact $ (++ "\n") . reverse . head . lines'
olleh

Hubotからワンライナーを実行する

reverse.coffee

Coffee Scriptについてほとんど知らない。ネット上の情報をつぎはぎして以下のようなやりかたを見つけた。scriptsディレクトリ以下に以下のコードを置いてみよう。

% vi reverse.coffee
spawn = require('child_process').spawn

module.exports = (robot) -> romot.hear /reverse/i, (msg) ->
echo = spawn 'echo', [msg.message]
reverse = spawn 'ghc', ['-e', 'interact $ reverse . head . lines']
echo.stdout.on 'data', (data) -> reverse.stdin.write(data)
reverse.stdout.on 'data', (data) -> msg.send data.toString()

reverseという語をふくむ書きこみをするとその行を反転させた文字列で答えてくれる。

自分で書いたコードを実行するには

上記のワンライナーの部分をrunghc ...でおきかえる。hellobotディレクトリ以下にhaskellディレクトリをつくりそこにHaskellコードを置く。

% mkdir haskell
% vi haskell/reverse.hs
main :: IO ()
main = interact $ (++ "\n") . reverse . head . lines

ghcrunghcとし引数リストの部分を['haskell/reverse.hs']とする。

まとめ

HaskellのワンライナーをHubotで実行させた。同じことをファイルに保存したソースコードでも行った。

「ボットを作る: インストール」へもどる 「Nano Scheme: はじめに」へ

正当なCSSです! HTML5 Powered with CSS3 / styling, and Semantics