Multiplate is an alternative extension of the Uniplate/Compos core library
to support mutally recursive
datatypes in a way that is as powerful as Compos, as easy to use as Biplate, and
more portable than both of them.
Multiplate does not require GADTs and does not require multi-parameter type classes.
It only requires rank 3 polymorphism.