Время от времени я спотыкаюсь о проблеме, которую хочу выразить, "пожалуйста, используйте последний аргумент дважды", например. для того, чтобы написать точечный стиль или избежать лямбда. Например.
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)
Но поскольку я не могу найти что-то вроде doubleArgs или dup в Hoogle, так что я думаю, что я мог бы пропустить трюк или идиому здесь.