Hand formatted through "Pattern Matching with Types"