Derive Uniplate and Biplate using the Direct combinators. You must specific monomorphic instances, i.e:
data Foo a = Foo a Int {-! deriving instance UniplateDirect (Foo Int) deriving instance UniplateDirect (Foo Int) Int !-}
All types referred to must be in scope at the time.
deriving UniplateDirect
with no arguments will be assumed to derive the Uniplate
instance on all types being unit.