On Mon, Mar 4, 2013 at 12:07 AM, Ertugrul Söylemez <es@ertes.de> wrote:
Arie Peterson <ariep@xs4all.nl> wrote:

> Would anyone have a problem with a deprecation of
> MonadCatchIO-transformers, and a failure to update it to work with a
> base without 'block' and 'unblock'?

Yes.  This is a simplified variant of a monad I use:

    newtype Continue f m a = Continue (m (Maybe a, f (Continue f a)))

It's related to Cofree and has a valid and very straightforward
MonadCatchIO instance.  However, it's probably impossible to write a
valid MonadTransControl/MonadBaseControl instance for it.

So I kindly ask you not to deprecate MonadCatchIO.  The reason I'm
hesitant about moving to monad-control is that it's hard to understand
and also very difficult to define for CPS monads.  It is commonly
believed to be impossible.

You can always cast the continuation to a dynamic type and cast it back later.
Doing so would typically require additional constraints, however if you're trying to make an instance for MonadTransControl that's unfortunately not possible (you'd need a Typeable constraint on the monad parameter, but it's not in scope).  Lacking an appropriate MonadTransControlWithTypeable class, it's certainly possible to fall back to various low-level, highly-dubious constructs.  Which I of course implemented without hesitation :grin
 
Also I've seen at least one article about the incorrectness of
monad-control.  That's one further reason I like to avoid it.

I'd appreciate a link if anyone could manage to find it.  I haven't seen any criticisms of monad-control.

John L.