У меня есть два экземпляра класса case одного типа.
case class Foo(x : Option[String], y : Option[String], z : Option[String])
Назовем созданные классы A и B.
val a = Foo(x=Some("foo"), y=Some("bar"), z=Some("baz"))
val b = Foo(x=None, y=Some("etch"), z=None)
Мне интересно, возможно ли обновить класс случая A с помощью B за одну операцию общим способом.
val c = b *oper* a // produces Foo(x=Some("foo"), y=Some("etch"), z=Some("baz"))
с параметрами, установленными как None, игнорируются. В идеале операция также должна быть универсальной, чтобы она могла работать с классом case любого типа.
У меня есть некоторая интуиция, что можно было бы сделать это с помощью Scalaz, сначала преобразовав класс в кортеж/список и преобразовав обратно в класс после завершения операции -, возможно, используя ApplicativeBuilder? Правильно ли я думаю об этом? Любые идеи?