On Tue, Dec 6, 2011 at 5:03 AM, Joey Hess <j...@kitenet.net> wrote: > I'm trying to convert from 0.2 to 0.3, but in way over my head. > > {-# LANGUAGE GeneralizedNewtypeDeriving #-} > newtype Annex a = Annex { runAnnex :: StateT AnnexState IO a } > deriving ( > Monad, > MonadIO, > -- MonadControlIO > MonadBaseControl IO > ) > > I added that after seeing this when I changed some code to use > the new liftBaseOp instead of liftIOOp. (They're equivilant, right?) > > No instance for (MonadBaseControl IO Annex) > arising from a use of `liftBaseOp' > > But with ghc 7.0.4, the derivation fails: > > Annex.hs:45:17: > Can't make a derived instance of `MonadBaseControl IO Annex' > (even with cunning newtype deriving): > the class has associated types > In the newtype declaration for `Annex' > > The only way I can find to make my code compile is to lose the newtype. > But of course that makes for some ugly type messages. > > -- > see shy jo > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe >
Hi Joey, I just spent a fair amount of time yesterday upgrading packages to monad-control 0.3. What I had to do was add in the MonadTransControl and MonadBaseControl instances manually. It's actually not too difficult; just copy out the instance for StateT and make a few changes. Be warned that Bas used some tricky CPP stuff, however, which you'll have to unwind ;). Michael _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe