Расширение 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 не проверяет, что эту функцию действительно невозможно вызвать.