Композиция f и g, которая выглядит как
f :. g = \a b -> f (g a) (g b)
это шаблон, который я очень часто встречаю в своем коде. Это похоже на композицию унарной функции, только f
является двоичной, и я хочу, чтобы g
применялось к обоим аргументам до того, как они будут переданы в f
.
Когда я прошу лямбдабота преобразовать это в бесточечную форму, я получаю странное заклинание
flip ((.) . f . g) g
чего я бы предпочел не иметь в своем коде, поэтому я просто явно пишу шаблон.
Есть ли общепринятый способ написания комбинатора для этой ситуации? Или я странный, потому что часто оказываюсь в этой ситуации?
У меня нет фактического примера того, когда я использую это прямо сейчас, так как я никогда не думал спрашивать здесь, когда мне это нужно, но можно было бы очень аккуратно написать с ним формулу евклидова расстояния, например так:
distance = sqrt . (+) :. (^2)
flip
можно исключить:(. g) . f . g
- person Sassa NF   schedule 28.09.2013