使用 $ 运算符将两个括号链接在一起

Chaining two parentheses together using $ operator

我有这个功能:

min (max 10 20) (max 30 40)

我可以将其重写为:

min (max 10 20) $ max 30 40

但是还有解决最后这些括号的方法吗?

并不是说这还不够好,但我就是不能放弃这个想法,必须有某种方法可以做到这一点...

您正在寻找

max 10 20 `min` max 30 40

如果能写出来就好了:

min $ max 10 20 $ max 30 40

但是,这行不通,因为 $ 是右结合的:

Prelude> :info $
($) :: (a -> b) -> a -> b   -- Defined in ‘GHC.Base’
infixr 0 $

因此,表达式被消歧为:

min ((max 10 20) max 30 40)

确实,$ 保留关联更有意义。但是,我们不能简单地使 $ 左结合,因为它可能会破坏现有代码。不过,您可以定义一个新的运算符:

infixl 0 %

(%) :: (a -> b) -> a -> b
f % x = f x

main = print (min % max 10 20 % max 30 40)

% 符号紧挨着美式键盘上的 $ 符号。