Я думаю, что это в основном для согласованности, так что все предложения можно читать так же, так сказать, то есть каждый RHS находится в одном и том же положении в типе функции. Я думаю, это замаскировало бы немало глупых ошибок, если бы вы тоже это допустили.
Также существует небольшая смысловая причуда: скажем, компилятор заполнил такие предложения, чтобы иметь такое же количество шаблонов, как и другие предложения; т. е. ваш пример станет
safeDivide x 0 = x
safeDivide x y = (/) x y
. Теперь рассмотрим, была ли вторая строка вместо safeDivide = undefined
; в отсутствие предыдущего предложения safeDivide
будет ⊥
, но благодаря выполненному здесь эта-расширению это \x y -> if y == 0 then x else ⊥
- поэтому safeDivide = undefined
фактически не определяет safeDivide
как ⊥
! Это кажется довольно запутанным, чтобы оправдать запрет таких статей, ИМО.