Upcast Divergence parameter instead of setting a contradictory value as in { type Divergence = Divergent }
Upcast Divergence parameter instead of setting a contradictory value as in { type Divergence = Divergent }
This allows a Divergent implicit to be less specific than the non-divergent instances, while at the same time not matching its own requirement of { type Divergence = Nondivergent }
Note: Upcasting Divergence also depends on returning a type variable instead of a known type. Divergent.Of[SyncSafe3[F]] will not fail the Nondivergent requirement, only Divergent.Of[C[F]] will.