Concurrent Clean : リストによる抽象

Start = sum $ map (\x = x*x) $ filter isOdd [0..100]

というプログラムが、処理の流れが「右から左」になるので、これを「左から右」または「上から下」にしたいという方へ。

(-->) infixl 0
(-->) a f :== f a

を定義すると、

Start = [0..100] --> filter isOdd
                 --> map (\x = x*x)
                 --> sum

と書けます。
この演算子、昔、Cleanでオブジェクト指向を云々とかやってたときに作った演算子ですが、結構使い出があるなぁ。