Haskell 98 higher order versions of Haskell Prelude classes to facilitate polymorphic recursion and reduce UndecidableInstances