在线中缀应用的`flip`参数

时间:2014-11-21 09:57:41

标签: haskell infix-notation

给出中缀使用的功能:

let f a b = (a+10, b)
f 4 5
=> (14,5)
4 `f` 5
=> (14,5)

可以通过定义辅助函数来翻转参数:

let g = flip f
4 `g` 5
=> (15,4)

是否可以内联执行此操作?

4 `flip f` 5
=> parse error on input `f'
4 `(flip f)` 5
=>  parse error on input `('

我的用例是Control.Arrow.first。而不是

(+10) `first` (7,8)
(17,8)

我更喜欢像

这样的前瞻性应用程序式解决方案
(7,8) `forwardFirst` (+10)

无需编写

let forwardFirst = flip first

1 个答案:

答案 0 :(得分:1)

详见HaskellWiki article on infix operators

  

请注意,通常只能使用两个函数来执行此操作   参数。实际上,对于一个多于两个参数的函数,   你可以做到,但它不是那么好

在你的情况下这样做的方法是这样的:

let f a b = (a+10, b)
let h a b = (f `flip` a) b
let a = 3
let b = 2
f a b = (13,2)
a `h` b = (12,3)