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

hgi*_*sel 3 syntax haskell dollar-sign function-composition

我有这个功能:

min (max 10 20) (max 30 40)
Run Code Online (Sandbox Code Playgroud)

我可以改写为:

min (max 10 20) $ max 30 40
Run Code Online (Sandbox Code Playgroud)

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

不像这不够好,但我不能放下思想,必须有一些方法来做到这一点......

Gur*_*las 5

您正在寻找

max 10 20 `min` max 30 40
Run Code Online (Sandbox Code Playgroud)


Aad*_*hah 5

能够写下来会很高兴:

min $ max 10 20 $ max 30 40
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为它$是右关联的:

Prelude> :info $
($) :: (a -> b) -> a -> b   -- Defined in ‘GHC.Base’
infixr 0 $
Run Code Online (Sandbox Code Playgroud)

因此,表达式被消除歧义为:

min ((max 10 20) max 30 40)
Run Code Online (Sandbox Code Playgroud)

实际上,$留下联想会更有意义.但是,我们不能简单地使$左关联,因为它可能会破坏现有代码.不过,您可以定义一个新运算符:

infixl 0 %

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

main = print (min % max 10 20 % max 30 40)
Run Code Online (Sandbox Code Playgroud)

%符号旁边的$符号美式键盘上.