Thanks Tom and Rodrigo. That clarifies the problem. We will need to think which solution makes better sense.
On Wed, 12 Apr 2023 at 15:01, Rodrigo Mesquita <rodrigo.m.mesqu...@gmail.com> wrote: > Indeed, this is included in the GHC 9.6.x Migration Guide > <https://gitlab.haskell.org/ghc/ghc/-/wikis/migration/9.6#transformers-06-new-monadtrans-quantified-context> > . > > Unfortunately, I’m also not sure there is a solution for this particular > where (T m) is only a Monad if m instances MonadIO. > As Tom explained, under transformers 0.6 `T` no longer is a monad > transformer. > > A few workarounds I can think of: > > - No longer instance `MonadTrans T`, and use a instance `MonadIO m => > MonadIO (T m)` instead. > Rationale: if you always require `m` to be `MonadIO`, perhaps the > ability to always lift an `m` to `T m` with `liftIO` is sufficient. > > - Add the `MonadIO` instance to the `m` field of `T`, GADT style, `data T > m a where T :: MonadIO m => m -> T m a` > Rational: You would no longer need `MonadIO` in the `Monad` instance, > which will make it possible to instance `MonadTrans`. > > - Redefine your own `lift` regardless of `MonadTrans` > > Good luck! > Rodrigo > > On 12 Apr 2023, at 10:10, Tom Ellis < > tom-lists-haskell-cafe-2...@jaguarpaw.co.uk> wrote: > > On Wed, Apr 12, 2023 at 02:32:43PM +0530, Harendra Kumar wrote: > > instance MonadIO m => Monad (T m) where > return = pure > (>>=) = undefined > > instance MonadTrans T where > lift = undefined > > > I guess it's nothing to do with 9.6 per se, but rather the difference > between > > * > https://hackage.haskell.org/package/transformers-0.5.6.2/docs/Control-Monad-Trans-Class.html#t:MonadTrans > > * > https://hackage.haskell.org/package/transformers-0.6.1.0/docs/Control-Monad-Trans-Class.html#t:MonadTrans > > I'm not sure I can see any solution for this. A monad transformer `T` > must give rise to a monad `T m` regardless of what `m` is. If `T m` > is only a monad when `MonadIO m` then `T` can't be a monad transformer > (under transformers 0.6). > > Tom > _______________________________________________ > ghc-devs mailing list > ghc-devs@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs > > > _______________________________________________ > ghc-devs mailing list > ghc-devs@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs >
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs