![](/img/trans.png)
[英]f, g, h :: Kleisli ((->) e) a b <=> f >>> (g &&& h) = (f >>> g) &&& (f >>> h)?
[英]A common pattern involving composition of functions (\a b -> f (g a) (g b))
f和g的組成看起來像
f :. g = \a b -> f (g a) (g b)
是我在代碼中經常發現的模式。 它類似於一元函數組合,只有f
是二元的,我想在傳遞給f
之前將g
應用於兩個參數。
當我要求lambdabot將其轉換為無點形式時,我得到了奇怪的咒語
flip ((.) . f . g) g
在我的代碼中我不想擁有它,所以我最終只是明確地寫出了模式。
是否有一種普遍接受的方法來為這種情況編寫組合子? 或者我在這種情況下發現自己很奇怪?
我現在沒有一個實際的例子,因為當我需要時,我從未想過要問這里,但可以想象用它非常整齊地寫出歐幾里德距離公式,就像這樣:
distance = sqrt . (+) :. (^2)
該功能被稱為on
的在Data.Function
模塊。
它經常使用中綴,例如sqrt . (+) `on` (^2)
sqrt . (+) `on` (^2)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.