涉及函数组合的常见模式(\ ab - > f(ga)(gb))

kqr*_*kqr 9 haskell functional-programming declarative pointfree

f和g的组成看起来像

f :. g = \a b -> f (g a) (g b)
Run Code Online (Sandbox Code Playgroud)

是我在代码中经常发现的模式.它类似于一元函数组合,只是f二进制,我希望g在它们传递给它们之前应用于两个参数f.

当我要求lambdabot将其转换为无点形式时,我得到了奇怪的咒语

flip ((.) . f . g) g
Run Code Online (Sandbox Code Playgroud)

在我的代码中我不想拥有它,所以我最终只是明确地写出了模式.

是否有一种普遍接受的方法来为这种情况编写组合子?或者我在这种情况下发现自己很奇怪?

我现在没有一个实际的例子,因为当我需要时,我从未想过要问这里,但可以想象用它非常整齐地写出欧几里德距离公式,就像这样:

distance = sqrt . (+) :. (^2)
Run Code Online (Sandbox Code Playgroud)

Rom*_*aka 24

onData.Function模块中调用此函数.

它经常用于中缀,例如sqrt . (+) `on` (^2).

  • 我简直不敢相信我没想到这个!谢谢一堆. (2认同)