syd_sydの日記

2006-06-14

昨日のHAppSに引き続き、Haskellでの「正しいネットワークプログラムの書き方と良いライブラリ」を知るためにソースを読んでいます。

(Network.SocketとかはStringを使っている時点でアウト)

[]Data.ByteString

lambdaBotソースを読んでいたら、ネットワーク送信部分らしき

import qualified Data.ByteString.Char8 as P (pack, hPut, hPutStrLn)
:
:
            Just msg -> P.hPut h $ P.pack $ IRC.encodeMessage msg "\r"

という記述を発見 (IRC.hs, 250行目付近)。

hPut? Data.ByteString? … あった。 ?? しかし私のghc-6.4.2には入ってない。 ghcのトップから辿れるドキュメントには載ってない。GHC6.5からは入るのかな?GHC6.6〜らしい。

Haskell Communities and Activities Report

ついこの間出たらしい。4.6.3を読むと,ByteStringは http://www.cse.unsw.edu.au/~dons/fps.htmlが元になっていると。 newBinaryやSerTHを漁っていたので面食らいました。でもserializingとはまた別の話かもしれない?

とりあえずネットワーク周りはこれを使っておけば良さそう。

クラスの話

に、屈指のHaskellハッカーな人からコメントを貰いました。多謝。

http://d.hatena.ne.jp/syd_syd/20060614

[]SerTHとData.ByteString

どちらもIOにはhPutBuf等が使われている。高速な文字列操作にはByteStringを、様々な型を簡単にserializationしたい時にはSerTHを使うのが良さそう。

SerTHは、Template Haskellによりserializeのためのインスタンス宣言(メソッドの定義)を簡略化することができる。