普通は、Scalaに用意されている関数合成を意味する'andThen' f andThen g (x) ====> g( f(x) ) を使って val result = (func1 andThen func2 andThen func3)(input) なんて風にやるわけですが、これだとまだデータフローっぽくありません。
そこで、演算子がメソッドとしてどんどん定義できるScalaの活躍です。
case class Function1WithLeftInput[-T1,+R](f: (T1) => R) { def ->:(input: T1) = f(input) def ->:[A](e: (A) => T1) = (e andThen f) }
として ->: を定義しておきます。
ちなみに、Scalaでは、お尻に:の付いているメソッドは right-associativeとして処理されます。ですから、 a ->: b ->: c ====> a ->: (b ->: c)と解釈されます。