I have to use third-party traits which are designed as:
trait Super[T]
trait Sub[T] extends Super[T]
and I have defined the following method to provide instances for arbitrary sealed families:
implicit def subFor[T, Repr](
implicit
gen: LabelledGeneric.Aux[T, Repr],
sg: Lazy[JsonFormat[Repr]]
): Sub[T] = ???
but somewhere else in the code, somebody has already defined
implicit def superFor[T]: Super[T] = ???
for some specific types, e.g. Option
and a few others.
Actually, I'd like to use the existing implementations instead of
using my subFor
generic implementation. However, because my
method returns Sub[T]
and the existing implementation returns
Super[T]
I can't see any way to define my implementation in
such a way that it is considered lower priority.
How can I block my subFor
from being called for specific types?
Is there some way to disable LabelledGeneric
for specific
types, or some priority reducing mechanism that would stop the
compiler from ever looking for my subFor
if it already sees a
Super[T]
?