haskell - Haskell 中函数组合的优先级是什么?

标签 haskell

我在课本上看到了这段代码:

double :: (Num a) => a -> a
double x = x * 2

map (double.double) [1,2,3,4]

我不明白的是,如果函数组合操作具有最高优先级,为什么要使用括号来包含 double.double?如果我删除这些括号,我会收到错误消息。那么函数组合的优先级到底是什么?

最佳答案

所有内置运算符各自的优先级和固定性都可以在 Haskell Report section 4.4.2 中找到。 。特别是,.!! 的优先级为 9,这是运算符中最高的。然而,函数应用程序不是运算符。函数应用程序经过专门设计,其优先级高于任何运算符,因此

map (double.double) [1,2,3,4]

这是应用函数 double 。 double 到列表的每个元素 [1, 2, 3, 4]

map double.double [1,2,3,4]

这是尝试组合函数 map doubledouble [1, 2, 3, 4],这不太可能成功(尽管从技术上来说这并不不可能)。

关于haskell - Haskell 中函数组合的优先级是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52133440/

相关文章:

haskell - 指定输入的列表类型

haskell - 是否有类型对齐序列的应用类比?

data-structures - 哪个基于树的字典在功能上最容易实现?

haskell - 平衡括号的秒差距

haskell - show w.r.t. 的语义转义字符

haskell - 在下面的示例代码上下文中,如何将函数输出显示为列表 [a],而不是字符串,show [a]

haskell - Windows 上的 regex-pcre

haskell - 为什么这个 Haskell 代码会产生堆栈溢出?

haskell - Emacs shell/term - 将光标从疯狂滚动的输出中解锁

haskell - 使用 let 在线解析错误(可能是不正确的缩进或不匹配的括号)