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