Chapter 2: A Static Checker for Safe Pattern Matching in Haskell. - Mitchell, Neil; Runciman, Colin (Trends in Functional Programming Volume 6, 2007)