- A case expression is the only way in Core to choose between values. A case
- expression evaluates its scrutinee, which should have an algebraic
- datatype, into weak head normal form (\small{WHNF}) and (optionally) binds
- it to \lam{bndr}. It then chooses a body depending on the constructor of
- its scrutinee. If none of the constructors match, the \lam{DEFAULT}
- alternative is chosen.
+ A case expression is the only way in Core to choose between values. All
+ \hs{if} expressions and pattern matchings from the original Haskell
+ PRogram have been translated to case expressions by the desugarer.
+
+ A case expression evaluates its scrutinee, which should have an
+ algebraic datatype, into weak head normal form (\small{WHNF}) and
+ (optionally) binds it to \lam{bndr}. It then chooses a body depending on
+ the constructor of its scrutinee. If none of the constructors match, the
+ \lam{DEFAULT} alternative is chosen. A case expression must always be
+ exhaustive, \ie it must cover all possible constructors that the
+ scrutinee can have (if all of them are covered explicitly, the
+ \lam{DEFAULT} alternative can be left out).