固定宣告
為了解析涉及運算子和函式的表示式,Haskell 使用 fixity 宣告來確定括號的位置。按順序,它
- 在 parens 包裝功能應用程式
- 使用繫結優先順序來包裝所有由相同優先順序的運算子分隔的術語組
- 使用這些運算子的關聯性來確定如何將 parens 新增到這些組
請注意,我們在此假設步驟 2 中任何給定組中的運算子必須具有相同的關聯性。實際上,Haskell 將拒絕任何不滿足此條件的程式。
作為上述演算法的一個例子,我們可以逐步通過向 1 + negate 5 * 2 - 3 * 4 ^ 2 ^ 1
新增括號的過程。
infixl 6 +
infixl 6 -
infixl 7 *
infixr 8 ^
1 + (negate 5) * 2 - 3 * 4 ^ 2 ^ 1
1 + ((negate 5) * 2) - (3 * (4 ^ 2 ^ 1))
(1 + ((negate 5) * 2)) - (3 * (4 ^ (2 ^ 1)))
有關 Haskell 98 報告的第 4.4.2節中的更多詳細資訊。