Generic Programming, with combinators, for Mutually Recursive Families in the Sums of Products style.
Check the Generics.MRSOP.Examples.RoseTreeTH
for a simple quick start,
or read our paper, "Sums of Products for Mutually Recursive Datatypes", for a more detailed description.