我有这个功能:
min (max 10 20) (max 30 40)
我可以把它改写成:
min (max 10 20) $ 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)
%
符号紧挨着美式键盘上的 $
符号。
关于haskell - 使用 $ 运算符将两个括号链接在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36682882/