優先順位の高い演算子は、優先順位の低い演算子よりも強くバインドされます。
複数の演算子が式に含まれている場合の順序を理解するには、最も優先順位の高い演算子から始めて、両側の式を括弧で囲み、演算子の優先順位までこれを続けます。同じレベルの演算子については、定義された結合性に基づいて順序を決定します。グループ化があいまいであるため、同じ優先度レベルで異なる連想動作の演算子を混在させることは違法です。この手順は、おそらく数値演算子での作業に慣れているでしょう。
2 + 3 * 5 - 1 + 2
-- * is infixl 7
2 + (3 * 5) - 1 + 2
-- + and - are infixl 6, so apply parens starting at the left
(2 + (3 * 5) - 1) + 2
((2 + (3 * 5)) - 1) + 2
>>
は よりも優先順位が高いため$
、 に同じ処理を適用します。
liftIO $ hClose port >> (return $ Bool True)
あなたにあげる
liftIO $ (hClose port >> (return $ Bool True))
したがって、最初にhClose
andreturn $ Bool True
が type の式に結合されIO (Bool')
、それが で持ち上げられliftIO
ます。(Bool'
型が何であれどこにありますかBool True
)。
Haskell Reportでは、構文、特に第 2 章、第 3 章、および第 9 章を徹底的に扱います。