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.