Załóżmy, że mam proste oświadczenie newtypetworzenia instancji MonadBaseControl dla newtype
newtype Foo a = Foo { unFoo :: ReaderT Int IO a }
chcę zrobić Foo wystąpienie MonadBaseControl IO. To powinno być łatwe, ponieważ ReadT Int IO jest już instancją IO MonadBaseControl. Jednak automatyczne wyprowadzenie go przy użyciu GeneralizedNewtypeDeriving nie działa, ponieważ klasa MonadBaseControl ma skojarzony typ.
Jak można napisać instancję IO MonadBaseControl dla Foo? defaultLiftBaseWith i defaultRestoreM powinny być pomocne, ale trochę trudno jest rozszyfrować ich typy.