Consider if it would be convenient to modify the DataSource trait, by moving the F[_] parameter to the trait, and the type-class bounds into protected methods of the trait. I.e., that would be replacing the following:
trait DataSource[I, A] {
def fetch[F[_] : ConcurrentEffect : Par](id: I): F[Option[A]]
by the following:
trait DataSource[F[_], I, A] {
protected implicit def conc: ConcurrentEffect[F]
protected implicit def par: Par[F]
def fetch(id: I): F[Option[A]]
Consider if it would be convenient to modify the
DataSourcetrait, by moving theF[_]parameter to the trait, and the type-class bounds into protected methods of the trait. I.e., that would be replacing the following:by the following: