У меня есть два экземпляра класса 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? Думаю ли я об этом правильно? Любые идеи?