저는 scalaz7 렌즈를 배우려고합니다. 설정 작업을 연결하는 더 좋은 방법이 있습니까?사슬 Scalaz 렌즈 세트 작업
case class Outer(left: Inner, right: Inner)
case class Inner(top: Int, bottom: Int)
val left = Lens.lensu[Outer, Inner](
(o,v) => o.copy(left = v),
_.left
)
val right = Lens.lensu[Outer, Inner](
(o,v) => o.copy(right = v),
_.right
)
val top = Lens.lensu[Inner, Int](
(o,v) => o.copy(top = v),
_.top
)
val leftTop = left >=> top
val rightTop = right >=> top
val outer0 = Outer(Inner(10,20), Inner(30, 40))
val outer1 = rightTop.set(leftTop.set(outer0, 11), 33)
업데이트 :
내가 대답은 내가 겨우이 작동하는 것 같다 이유를 이해하지만, 상태 모나드를 사용할 수도 있다는 느낌이 듭니다. 더 깔끔한 방법이 있는지 알고 싶습니다.
val modifier = for{
_ <- leftTop := 11
_ <- rightTop := 33
} yield Unit
modifier(outer0)._1 // = Outer(Inner(11,20),Inner(33,40))