>>298
> その例だと、他の流れが見え難くなる気がします
そのように要求すれば、それを可能な限り満たすように記述できる仕組みを作ればいい。
Haskell はそれができる(完璧とは言い難いが、記述方法に関してはかなり柔軟だ)。

あの例は、ピッチャーとバッターとキャッチャーのボールを通した「関係」を
プログラムで示した。

さらに、バッターが撃ったボールと野手との関係を示したかったら、それらを追加して、
先の関係の結果と今回の関係の結果を合成すればいい。
(ここではインデントが正しく表示できないかもしれん)

result <== field (    (catcher <== batter <== pitcher)
                  <+> (batter ==> [fielder1, fielder2, ・・・]))

<+> 演算子で2つの関係の結果を合成する。
べつに一気に一つの式にしなくても、分けて記述してもいい。
更にイニングの関係を被せればゲームそのものも表現できる。
(それにはもう少し洗練させる必要があるが)

ボールが見えないのは、「ボールを通した関係」を表してるんだ。
このプログラムを書いてる者や見る者に取っては、コメントにでも書いておけば
ボールを通した関係であることが明らかだから、記述する必要がない。
記述したければ記述するように書き換えできるけど、冗長だ。

あくまで、短時間で思いついた書き方を示しただけだ。
もっと直感的に書ける方法も当然あるだろうな。
Haskell ならそれが「考えやすい」し「設計しやすい」。