Spec-Zone.ru › Haskell 9

6.2.14. Альтернативы пустого случая

EmptyCase
Since:

7.8.1

Status:

Включено в GHC2024, GHC2021

Разрешает выражения пустого случая.

Расширение EmptyCase позволяет использовать выражения case, или выражения lambda-case, без альтернатив, таким образом:

case e of { }   -- No alternatives

или

\case { }       -- -XLambdaCase is also required

Обратите внимание, что это не разрешено для \cases, так как неясно, сколько шаблонов сопоставляется.

Это может быть полезно, когда известно, что анализируемое выражение не имеет значений, отличных от bottom. Например:

data Void
f :: Void -> Int
f x = case x of { }

С зависимо типами это более полезно (см. #2431). Например, рассмотрим эти два кандидатных определения absurd:

data a :~: b where
  Refl :: a :~: a

absurd :: True :~: False -> a
absurd x = error "absurd"    -- (A)
absurd x = case x of {}      -- (B)

Мы значительно предпочитаем (B). Почему? Потому что GHC может определить, что (True :~: False) — это пустой тип. Таким образом, (B) не имеет частичности, и GHC может скомпилировать с -Wincomplete-patterns и -Werror. С другой стороны, (A) выглядит опасно, и GHC не проверяет, чтобы убедиться, что функция никогда не может быть вызвана.

© 2002–2007 The University Court of the University of Glasgow. All rights reserved.
Licensed under the Glasgow Haskell Compiler License.
https://downloads.haskell.org/~ghc/9.12.1/docs/users_guide/exts/empty_case.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API