It's a known fact that something like EitherT[IO, E, ?] has two channels of failing: by raising the Throwable in IO and by raising a E in an inner Either. Instead of prioritizing the former, I suggest we expose the ability to work with both channels of failure directly by using a coproduct type.
The title says it all, basically.
It's a known fact that something like
EitherT[IO, E, ?]
has two channels of failing: by raising theThrowable
inIO
and by raising aE
in an innerEither
. Instead of prioritizing the former, I suggest we expose the ability to work with both channels of failure directly by using a coproduct type.Same applies to
OptionT[F, A]