メモ
conduitのやりかたで、Gzipの展開、圧縮のコードを書いてるのだけど、ByteStringとBitに関係するパイプとして、以下のものを使う。
* onDemand
* bits
* bitsToByteString
onDemandは要求された長さのビット列またはバイト列をわたすパイプで、長さはビット数、バイト数で指定することができる。バイト数で指定する場合には、足りなかったときに「あるだけ渡す」か「Nothingにする」かで2通りの方法がある。また\0までを渡すという渡しかたと、あと取り出しすぎた分をもどすことが可能。
bitsはビット列またはバイト列を渡されると、1ビットずつ次のパイプに渡していく。
上記の2者は展開のときに使われる。
bitsToByteStringは圧縮のときに使われる。ビットのリストを渡されると、8ビットそろった段階でバイト列を渡す。