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