я на спидране показывал подход для простых типов
ну вот например на примере
https://github.com/TinkoffCreditSystems/tofu/blob/master/core/src/main/scala/tofu/Context.scala#L111есть примесь с инстансом для полу-стандартного типа
Она примешивается в компаньоны
https://github.com/TinkoffCreditSystems/tofu/blob/master/core/src/main/scala/tofu/Context.scala#L107И добавляется к следующим примесям
https://github.com/TinkoffCreditSystems/tofu/blob/master/core/src/main/scala/tofu/Context.scala#L90Всё более слабые предки получают инстансы более сильных.
Но амбигуйти нет, потому что компаньон указывает свой тип для результата
https://github.com/TinkoffCreditSystems/tofu/blob/master/core/src/main/scala/tofu/Context.scala#L77Получается, что из двух инстансов, когда компилятор его из-за проблем своих увидит в двух компаньонах - он выберет из более сильного компаньона, потому что там тип более точный.
Поэтому на самом деле, в котах можно легко сделать так, чтобы весь cats.instances не был нужен.
Потому что причина, по которой инстансы не запихали в компаньоны - амбигуйти, когда один инстанс в двух компаньонах