タイトルは釣り。どっちかというと Iteratee がメイン。(だってみんな Iteratee とか見ても記事開かないでしょ)
1週間くらい Stream について考え続けて、やっぱりわからなくて。でも、こんな基本的な概念、誰かが既に考えつくしてるに違いない、と思ってググってみたら、あった。そして、またお前か、Haskell。
Iteratee
ほとんど Stream。モナドとかオートマトンとか言い始めるときりがないので演算子とその働きだけ大雑把に眺めてみた。
Gist: Iteratee とその演算子の働きとか。すっごく大雑把で、記号も適当ですが雰囲気だけ。
================================================================== Enumerator -> Enumeratee -> Iteratee ================================================================== Iteratee >>== Iteratee := Iteratee ------------------------------------------------------------------ Enumerator $$ Iteratee := Iteratee ------------------------------------------------------------------ Enumeratee =$ Iteratee := Iteratee ------------------------------------------------------------------ Enumerator $= Enumeratee := Enumerator ------------------------------------------------------------------ Enumerator >==> Enumerator := Enumerator ------------------------------------------------------------------
Stream に置き換えると、Enumerator が Readable、Enumeratee が Transform、Iteratee が Writable、という感じ。ちょっと違うけど、そんな感じ。
Stream と違うのは、Enumerator 同士の結合と、Iteratee 同士の結合。これが型と相まって地味に便利っぽい。
ということで JavaScript で Iteratee を実装してみてます。どうなることやら。