I said it over in the other thread, but do folks think that forbidding macros from synthesizing declarations but allowing them to fill in arbitrary definitions is a reasonable compromise? This would mean that @data
would not be able to generate an apply
or withX
methods, but it could still fill in equals
and hashCode.
I think the withX
methods could be done lens style with .with(_.x)(value)
if there is a trait Data
with def with[T](field: Self => T)(value: T): Self
. Okay, Self
doesn’t exist in Scala 3 (right?), but that’s a separate issue