Most discussion is on Typelevel Discord: https://discord.gg/bSQBZA3Ced
raiseError
, handleErrorWith
, attempt
, and so on
flatMap/mapN
short-circuit
e
such that raiseError(e).flatMap(f) == raiseError(e)
raiseError(e).handleErrorWith(_ => fa) == fa
IO
is duplicitous, it's hiding the fact that errors can and do occur, no?
IO is duplicitous, it's hiding the fact that errors can and do occur, no?
That's an entirely orthogonal discussion
Either
or throw/catch
MonadError[F, E]
and you already know how to do a large class of things with it
onError
on monad error