Миграция Typelevel экосистемы на CE3 до сих пор буксует. Многие базовые библиотеки типичного CRUD-стэка либо только-только разродились стабильными релизами (http4s), либо находятся на этапе RC и даже майлстоунов (doobie, tapir), либо вообще ещё не имеют полной поддержки (tofu).
Просто напомню, что с момента стабильного релиза CE3 прошло больше 4 месяцев, а RC были доступны задолго до этого.
Я наблюдал за миграцией многих библиотек, и основные проблемы, которые я заметил, были связаны с использованием плохих абстракций (привет ConcurrentEffect) и смешным игнорированием
F[A] просто так, без какого-то контекста и рантайма. А когда это всё же удаётся, не всегда получается сделать это правильно (конструктор Dispatcher'а создает его как ресурс, теряющий локальные модификации контекста и отменяющий все запущенные файберы по выходу из use-скоупа). С другой стороны, в официальном около-CE-стэке никогда и не было всех необходимых тайпклассов для полноценной работы с контекстными эффектами.Очень жаль, что оригинальный (откровенно плохой) дизайн первых Cats Effect сыграл злую шутку с tagless final и сделал для его похорон гораздо больше, чем ZIO. Остается лишь процитировать классика — он оказался чертовски прав. Ещё печальнее, что даже после трёхлетней работы над новым дизайном там остались изъяны, которые теперь уже никогда не будут устранены в угоду обратной совместимости. Неприятно было наблюдать в dev-каналах гиттера и дискорда Typelevel, как неплохие идеи зарубили аргументами о том, что юзеры болезненно воспринимают любые изменения, требующие что-то переписать. К слову, сами авторы надеются, что CE4 никогда не появится (т.е. всё отлито в граните и кардинально уже не изменится). С таким подходом поезд ZIO будет уже не догнать.
Тяжелее всего миграция далась библиотекам, которые имеют кучу интеграций и обязаны их поддерживать на своей стороне. Например, в trace4cats количество блокеров, не включая транзитивных, в начале пути превышало десяток. Просто дождаться от каждого из них хотя бы майлстоуна заняло 3 месяца. Ещё столько же времени ушло на их стабилизацию. Это стало основной мотивацией для распиливания монорепы аж на 20 репозиториев, чтобы иметь возможность релизить их независимо.
Другой пример — tapir. Они всё ещё сидят в монорепе и несколько месяцев не могли сделать первый M-релиз из-за одного единственного блокера — catbird. Им раньше занимался Трэвис, но потом он самоустранился и отдал миграцию в руки Typelevel-сообщества. Бесхозный статус сильно замедлил переход на CE3 и сделал эту библиотеку блокером для tapir'а и (транзитивно) для нас.
Но, несмотря на все сложности, я очень доволен результатом в trace4cats: отрефакторили многие вещи, исправили кучу багов, а фиксы бэкпортировали в CE2-совместимую версию, воплотили новые идеи, реализовать которые под СЕ2 было бы достаточно сложно, а в СЕ3 оказалось возможно и очень интересно.
В общем, теперь всё готово, можно брать и тащить в прод!