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

标签 haskell syntax function-composition dollar-sign

我有这个功能:

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/

相关文章:

haskell - 打印一些东西的递归函数

variables - Docker Compose 中的环境变量赋值 - 冒号方式

Java:操作顺序、增量后澄清

scala - Scala 中函数组合的简洁语法?

python-3.x - 如何使用运算符来组合函数?

haskell - 使用 Data.Machine,您将如何描述一个以非确定性函数的结果为分支的计划?

haskell - 仆人服务器发送事件支持

haskell - 编写具有通用量化返回类型的函数

c++ - 需要帮助来理解 C++ 语法

Haskell 函数组合、(.)(.) 的类型及其呈现方式