我有这个功能:
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)
The %
符号就在旁边$
美国键盘上的符号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)