First class patterns and pattern matching, using type families