我有这个功能:
min (max 10 20) (max 30 40)
我可以将其重写为:
min (max 10 20) $ max 30 40
但是还有办法解决这些最后的括号吗?
并不是说这不够好,但我不能放下这个想法,必须有某种方法来做到这一点......
答案 0 :(得分:5)
您正在寻找
max 10 20 `min` max 30 40
答案 1 :(得分:5)
能够写下来会很高兴:
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)
%
符号位于美国键盘上的$
符号旁边。