We should use a type parameter with a context bound (e.g. F[_]: Sync
) in library code so users can choose their IO monad, but we should use a concrete IO monad in application code.
If you're writing a library that makes use of effects, it makes sense to use the cats-effect type classes so users can choose their IO monad (IO, ZIO, Monix Task, etc).
So instead of