Есть ли какая-либо гарантия относительно порядка оценки в соответствии с шаблоном?

Следующие

(&&) :: Bool -> Bool -> Bool
False && _ = False
True && False = False
True && True = True

имеет желаемое свойство короткого замыканияFalse && undefined ≡ False, Первый пункт, который не является строгим в правильном аргументе, гарантированно будет проверен, прежде чем что-либо еще будет испробовано.

Видимо, все равно работает, если я изменю порядок и даже не выполню функцию

both :: (Bool,Bool) -> Bool
both (True,False) = False
both (True, True) = True
both (False, _) = False

Prelude> both (False, undefined)
False

но действительно ли это гарантировано стандартом? В отличие от порядка предложений, порядок оценки шаблонов здесь не так ясен. Могу ли я быть уверен, что соответствие(True,False) будет прерван, как только(False,_) определяется, прежде чем элемент snd будет оценен вообще?

Ответы на вопрос(1)

Ваш ответ на вопрос