Exceptions provided by base
work only in IO. I know of two generalizations of these exceptions to other monads:
They seem to be doing the same thing. MonadBaseControl
is more grand. but I do not follow how that grandeur is motivated. I used each of them once or twice and I did not see any difference.
Is there a clear cut best practice for when to use one or the other?
I prefer to use MonadCatch
where possible because MonadBaseControl
is much more than just the ability to catch errors. There are many more things you can do if you have MonadBaseControl
, not all of which are universally agreed to be a good idea (e.g., see lifted-base
, which provides a lot of stuff using MonadBaseControl
, like the ability to fork threads)
1 Like
There’s also
For monads isomorphic to ReaderT
over IO
.
1 Like