I was working on a SIP draft when I realized that one of my motivating use cases, zio-k8s, won’t actually work with the approach as discussed so far .
An example zio-k8s definition might look as follows:
val deployment =
Deployment(
metadata = ObjectMeta(name = "foo"))
Now ideally we should be able to write this like so:
val deployment =
Deployment(
metadata = #(name = "foo"))
But this doesn’t work, because the type of the metadata
field isn’t actually ObjectMeta
, it is Optional[ObjectMeta]
, where Optional
is from the ZIO prelude. The first example still compiles because there is an implicit conversion from A
to Optional[A]
. But in the the second example, #(name = "foo")
would be desugared to Optional(name = "foo")
, which doesn’t work.
I have an idea for how to fix it, but I’d be interested in hearing the community’s thoughts about this issue first.