This fails with
Ambiguous given instances: both given instance derived$JsonRW in object MyData and given instance autoderiveNamedTuple in trait LowPriorityJsonRWInstances match type Playground.JsonRW\[T\] of parameter rw of method parseJson in object Playground“
import NamedTuple.AnyNamedTuple
trait JsonRW[T]:
def parse: T
object JsonRW extends LowPriorityJsonRWInstances:
inline def derived[T]: JsonRW[T] =
new JsonRW { def parse: T = ??? }
trait LowPriorityJsonRWInstances:
// inline given autoderiveUnion[T]: JsonRW[T] =
//new JsonRW { def parse: T = ??? }
inline given autoderiveNamedTuple[T <: AnyNamedTuple]: JsonRW[T] =
new JsonRW { def parse: T = ??? }
extension (strValue: String)
def parseJson[T](using rw: JsonRW[T]): T = rw.parse
case class MyData() derives JsonRW
def parseMyData: MyData = "".parseJson
It works if I add explicit type like parseJson[MyData].
Is this expected behavior?