С учетом следующего кода:
case class Person(name :String)
case class Group(group :List[Person])
val personLens = GenLens[Person]
val groupLens = GenLens[Group]
как я могу "отфильтровать" определенных лиц из выбора, а не индексом, а определенным свойством Person
, например:
val trav :Traversal[Group, Person] = (groupLens(_.group) composeTraversal filterWith((x :Person) => /*expression of type Boolean here */))
Я нашел только функцию filterIndex
, которая включает только элементы из списка на основе индекса, но это не то, что я хочу.
filterIndex
принимает функцию типа: (Int => Boolean)
и я хочу:
filterWith
(составленное имя), которое принимает (x => Boolean)
, где x имеет тип элемента списка, а именно Person
в этом коротком примере.
Это кажется настолько практичным и распространенным, что я предполагаю, что кто-то подумал об этом, и я (с моим, я должен признать ограниченное понимание вопроса) не понимаю, почему это невозможно.
Мне не хватает этой функции, она еще не реализована или просто невозможна по какой-либо причине (пожалуйста, объясните, есть ли у вас время).
Спасибо.