and Flexible Matching of Recursive Types