中缀应用内联的`flip`参数

Tob*_*ann 6 haskell infix-notation

给定中缀使用函数:

let f a b = (a+10, b)
f 4 5
=> (14,5)
4 `f` 5
=> (14,5)
Run Code Online (Sandbox Code Playgroud)

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

let g = flip f
4 `g` 5
=> (15,4)
Run Code Online (Sandbox Code Playgroud)

内联是否可以这样做?

4 `flip f` 5
=> parse error on input `f'
4 `(flip f)` 5
=>  parse error on input `('
Run Code Online (Sandbox Code Playgroud)

我的用例是Control.Arrow.first.代替

(+10) `first` (7,8)
(17,8)
Run Code Online (Sandbox Code Playgroud)

我更喜欢像我这样的前向应用程序式解决方案

(7,8) `forwardFirst` (+10)
Run Code Online (Sandbox Code Playgroud)

无需写

let forwardFirst = flip first
Run Code Online (Sandbox Code Playgroud)

shr*_*t18 1

正如HaskellWiki 关于中缀运算符的文章中详细介绍的那样,

请注意,通常只能使用带有两个参数的函数来执行此操作。实际上,对于接受两个以上参数的函数,您可以这样做,但效果不太好

在您的情况下执行此操作的方法如下:

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)
Run Code Online (Sandbox Code Playgroud)