В этой серии я буду публиковать короткие сообщения о том, как определенные проблемы могут быть решены в Scala, обычно с использованием методов FP и библиотек из экосистемы Typelevel/cats.

Если вам нужно познакомиться с Cats, я предлагаю вам пройти по этим ссылкам:

https://typelevel.org/cats/typeclasses.html
https://www.youtube.com/watch?v=HMs_F7LXTak (да, это моя бессовестная самореклама)
https://slideslive.com/38908126/oh-all-the-things-youll-traverse
https://typelevel.org/cats/resources_for_learners.html

Ладно, вернемся к посту. Сегодня мы сосредоточимся на простой задаче:

Я хочу сопоставить список/вектор/поток, зная индекс текущего обрабатываемого элемента.

Не спрашивайте больше! Мы будем использовать Traverse.

(если вы все еще не понимаете, что такое Traverse, прокрутите вверх и обязательно посмотрите выступление Луки!)

Сигнатура метода выглядит довольно простой в использовании. Тогда воспользуемся!

Здесь у нас есть функция, которая принимает F из As (например, List из Ints) и изменяет элементы с четными индексами, используя функцию, переданную как modify.

Вот как вы будете его использовать, а также результаты.

Примечание. Убедитесь, что у вас включен -Ypartial-unification.

И это все! В Traverse есть еще много полезных функций, и в будущем мы, возможно, рассмотрим их больше.

Дайте мне знать, если у вас есть другой вариант использования этого блестящего класса шрифтов или у вас есть какие-либо вопросы о кошках (даже если я не смогу ответить, я направлю вас к нужным людям!)

Спасибо за чтение!