ときどき、ポイントフリー スタイルを記述したり、ラムダを回避したりするために、「最後の引数を 2 回使用してください」と表現したい問題に出くわします。例えば
sqr x = x * x
次のように書くことができます
sqr = doubleArgs (*) where
doubleArgs f x = f x x
または、この少し複雑な関数を検討してください (この質問から取得):
ins x xs = zipWith (\ a b -> a ++ (x:b)) (inits xs) (tails xs)
次のような関数があれば、このコードを無意味に書くことができます。
ins x = dup (zipWith (\ a b -> a ++ (x:b))) inits tails where
dup f f1 f2 x = f (f1 x) (f2 x)
しかし、Hoogle で doubleArgs や dup のようなものを見つけることができないので、ここでトリックやイディオムを見逃す可能性があると思います。