As discussed on discord, I proposed to expand the experimental Generic Numeric Literals into a Generic Constructor Literals.
So similarly we can define an implicit of something like:
trait FromLiteralList[T]:
def fromList(args: Any*): T
It would trigger for literal lists defined by []
(e.g., ["hello",[1, 2, some_param]]
).
Then we can add a specific FromLiteralList
for case classes that enforces the types can can recursively summon FromLiteralList
or FromDigits
to each of the target case class arguments.
case class Foo(arg1: Int, arg2: String, bar: Bar)
case class Bar(arg1: String, list: List[Int])
val foo: Foo = [1, "2", ["bar1", [1, 2, 3, 4, 5, 6]]]