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

Reply via email to