我正在努力将状态,镜头和地图结合在一起。
给出以下案例类别
case class Item(id: Int, text: String)
case class Container(items: Map[Int, Item])
case class Parent(container: Container)
及以下镜片
val parentContainer = Lens.lensu[Parent, Container](
(parent, newValue) => parent.copy(container = newValue),
_.container)
val itemText = Lens.lensu[Item, String](
(item, newValue) => item.copy(text = newValue),
_.text)
还有修改项目的功能
val toUpper : State[Item,_] = for {
_ <- itemText.st.map(_.toUpperCase())
} yield()
我需要映射所有容器项目,并使用 toUpper 函数
对其进行修改val toUpperAll : State[Parent,_] = for {
_ <- parentContainer ... map over items and call toUpper ??
} yield()