Iteratee.scalaのソースコードを読んでいます:https://github.com/playframework/Play20/blob/master/framework/src/iteratees/src/main/scala/play/api/libs/iteratee/Iteratee。スカラ
具体的には、「フォールド」イテラティーを構築するための便利な方法です。
def fold[E, A](state: A)(f: (A, E) => A): Iteratee[E, A] = {
def step(s: A)(i: Input[E]): Iteratee[E, A] = i match {
case Input.EOF => Done(s, Input.EOF)
case Input.Empty => Cont[E, A](i => step(s)(i))
case Input.El(e) => { val s1 = f(s, e); Cont[E, A](i => step(s1)(i)) }
}
(Cont[E, A](i => step(state)(i)))
}
それぞれのcaseステートメントで、DoneまたはContコンストラクターを呼び出しています。しかし、これらのコンストラクターはどこで定義されていますか?これらはIterateeトレイトの実装者である必要があると推測しますが、「extends Iteratee」に対して、ctrl+Fを実行してもそれらを見つけることができませんでした。