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. (http://haskell.org/haskellwiki/Multiplate)