给定一个用于中缀使用的函数:
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
g
? - shree.pat18(7,8) & _1 %~ (+10)
。当然,你也可以直接使用&
,写成(7,8) & first (+10)
。这是否与你想要的类似? - snak(&) = flip ($)
并将其用作(7,8) & first (+10)
比定义每个函数的翻转版本更好。 - snak