我在课本上看到了这段代码:
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 double
和 double [1, 2, 3, 4]
,这不太可能成功(尽管从技术上来说这并不不可能)。
关于haskell - Haskell 中函数组合的优先级是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52133440/