Недавно я просмотрел фрагмент кода, который использовал Haskell's otherwise
для соответствия шаблону в списке. Это поразило меня, как странно, так как:Haskell `в противном случае 'является синонимом` _`?
ghci> :t otherwise
otherwise :: Bool
Итак, я попытался следующие:
ghci> case [] of otherwise -> "!?"
"!?"
Я также пробовал с различными другими моделями различных типов и с -XNoImplicitPrelude
включен (чтобы удалить otherwise
из scope), и он все еще работает. Это должно произойти? Где это документировано?
В прелюдии он определяет 'в противном случае = True'. Использование его в шаблоне соответствует только теням этого определения, вводя новую, более локальную переменную, которая также называется «иначе». Подобным примером является «случайное» затенение, которое может сбивать с толку »(==) ->« Y'know », ++ (==)', который возвращает «Y'know, теневое кодирование может сбивать с толку». – AndrewC
С тех пор, как никто еще не сказал об этом, «иначе» предполагается использовать как защитное выражение, а не образец. 'case ... of pat | ... -> ... | в противном случае -> ... 'Теперь его определение как« Истина »важно. –
@AndrewC, отличный пример! – luqui