Операции обновления в классе Case Scala

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

12
задан kiritsuku 12 July 2012 в 10:26
поделиться