Я не понимаю роли bottom (⊥ или _|_) в определениях функций Haskell.
Определение zip, например, описывает его как "правильное ленивое", потому что
zip [] _|_ = []
но я не понимаю, как это отличается от
zip [] _ = []
Какую роль играет _|_ в определении функций, например, выше? В частности, как это отличается от использования _?
ОБНОВЛЕНИЕ И ЗАМЕЧАНИЕ: поскольку читатели превосходных ответов обнаружат для себя, важная часть этих ответов стоит здесь: ⊥ не (и не может), по сути, появляются в определениях функций Haskell. Читайте дальше.