А внутри и некоторое входное значение типа B. Нужно пройти по списку и для каждого элемента списка выполнить функцию f: (A, B) => F[A] передавай результат к следующему элементу. Кроме того есть некоторая s: A => F[Bool], которая останвливает наше движение по списку. После остановки выполняем g: (A, B) => F[A] в обратном порядке. По сути это стек дейстий с проверкой условия и обратного действия. Я конечно написал это через foldLeft с применением f и сохранением стека примененных A, применением s к результату для остановки, а потом другой foldLeft для применения g. Вопрос! Как это сделать в более общем виде? Чувствую что помогут мне recursion schemas или чтото вроде этого. Подскажите куда копнуть.
А зачем нужен B? Функция из (a, b) => f<b>?
foldMapF
https://github.com/typelevel/cats/blob/927797930bfec97e93201cdc7932f74ebe878d47/core/src/main/scala/cats/Foldable.scala#L201
Обсуждают сегодня