2011年9月6日火曜日

ScalazでIteratee その2

前の続き。

実際にファイルを読み込めるようにしました。


EnumeratorMはIterVをモナドで包むための型です。

enumReaderはブログの例とは違いますが、一字ずつ読み込むのではなく、BufferReaderを用いて一行づつ読み込むようにしています。
<<<はScalazで定義されており、composeと同じです。
enumと同様に、Doneになるまで処理を繰り返します。

enumFileはファイルをenumReaderに渡す。
bracketにより、closeReaderが確実に行われることが保証されています。

実行例

現在、scalaz.effectsにあるIterateeな入出力関数はこれらと、標準入力からの読み込みだけです。

2 件のコメント:

  1. そういえば okomok さんが絶賛開発中(?) の

    「 Scala での Haskell DSL (?) 」

    の ken っていうライブラリの中にも Iteratee ってclass あるけれど

    https://github.com/okomok/ken/blob/7f8036d1d5c3469b2f5ff8759326b6ee21cdd3bd/src/main/scala/com/github/okomok/ken/enumerator/_Types.scala#L43-65

    返信削除
  2. >kenji
    あ、それはkenの耐久性を調べるためのもんなので
    相手にしない方がいいです 笑
    Haskellのコードのコピペですし・・・

    返信削除