Supponiamo che io sono semplice dichiarazione Newtypecreando esempio MonadBaseControl per Newtype
newtype Foo a = Foo { unFoo :: ReaderT Int IO a }
voglio fare istanza Foo di MonadBaseControl IO. Dovrebbe essere facile, dato che ReaderT Int IO è già un'istanza di MonadBaseControl IO. Tuttavia, la derivazione automatica utilizzando GeneralizedNewtypeDeriving non funziona, poiché la classe MonadBaseControl ha un tipo associato.
Come si può scrivere un'istanza di MonadBaseControl IO per Foo? defaultLiftBaseWith e defaultRestoreM dovrebbero essere utili, ma è un po 'difficile decifrare i loro tipi.