Lens便利
HoloLensの話ではない。scalaz.Lensの話。
これが
```
object Main extends App {
val a = A(B(C(D(1))))
println(a)
val copy = a.copy(a.b.copy(a.b.c.copy(a.b.c.d.copy(2))))
println(copy)
}
case class D(value: Int)
case class C(d: D)
case class B(c: C)
case class A(b: B)
```
こうなる
```
object Main extends App {
val a = A(B(C(D(1))))
println(a)
val AB = scalaz.Lens.lensu[A, B](
(a, b) => a.copy(b = b),
_.b
)
val BC = scalaz.Lens.lensu[B, C](
(b, c) => b.copy(c = c),
_.c
)
val CD = scalaz.Lens.lensu[C, D](
(c, d) => c.copy(d = d),
_.d
)
val DX = scalaz.Lens.lensu[D, Int](
(d, x) => d.copy(x = x),
_.x
)
val A2X = AB >=> BC >=> CD >=> DX
val copy2 = A2X.set(a, 2)
println(copy2)
}
case class D(x: Int)
case class C(d: D)
case class B(c: C)
case class A(b: B)
```
テストデータ作るのに便利