case package:ghc
Match the scrutinee of a case and potentially return a new scrutinee
and a function to apply to each literal alternative.
Case rules
It's important that occurrence info are present, hence the use of In*
types.
The x in case scrut of x { (y,z) -> ... }
The y,z in case scrut of x { (y,z) -> ... }
Patterns and guards in a case alternative
Threshold for LiberateCase