集約される式と展開される式

普通の式は関数からなる. 関数は複数の引数を取り, 1 個の返り値に集約する.

しかし, 逆があってもいいのではないか. すなわち, ただ 1 個の種を取り, 複数の返り値に展開していくのである. 一見普通の式であるが, 引数のように見えるところは返り値を渡す先になる. さらに, カリー化の発想を借りれば, 返り値を 1 個ずつ順に得るジェネレータと捉えることもできそうである.

突飛なことを言っているように聞こえるかもしれないが, 実際, 現実にもこういう状況はあって, 例えば, CUI アプリは, ストリームを 1 個だけ入力に持ち, 2 個のストリームに出力する.

これによるプログラミングでどういう恩恵が受けられるのかは全然検討できていないが, とりあえず面白そうな気がする. コルーチンとかあの辺が上手に書けたりしないのだろうか?