Data.Array的//运营商优先级

时间:2015-02-26 09:37:44

标签: arrays haskell types

我注意到在以下示例中:

incrementByIndices :: Array Int Int -> [Int] -> Array Int Int
incrementByIndices arr indices = arr // zip indices (map (\i -> arr!i + 1) indices)

zip不必被括号括起来。为什么会这样? :i (//)没有显示//的不同优先级,因此我认为它是常规函数应用程序。为什么我没有出现类型检查错误,指出zip不能成为//的论点?

相反:

nub nub [1,2,3]

2 个答案:

答案 0 :(得分:11)

函数应用程序绑定比任何操作符都紧,所以你的表达式不需要括号,原因与之相同,例如,这个不是:

zip [1,2,3,4] [5,6,7,8] ++ zip [20,30] [30,40]

(//)的优先级和固定性在这里并不重要!

答案 1 :(得分:3)

The documentation提到9的优先顺序:

(//) :: Ix i => Array i e -> [(i, e)] -> Array i e     | infixl 9 |