Spec-Zone.ru › Haskell 9

6.2.14. Пустые альтернативы case

EmptyCase
Начиная с:

7.8.1

Статус:

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

Разрешает пустые выражения case.

Расширение 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.14.1/docs/users_guide/exts/empty_case.html

Spec-Zone.ru

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