higher order versions of the "Scrap Your Boilerplate" combinators to ease the implementation of polymorphic recursion and reduce UndecidableInstances