我注意到在以下示例中:
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]
答案 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 |