Итак, продолжим начатую ещё в начале года тему с постижением функционального программирования через девиантные python пакеты. Lenses – отличная реализация lenses из haskell на python. Я планировал приложить к этому посту ещё какую-нибудь статью про саму концепцию, но, как мне кажется, пример из readme этого пакета – лучшая иллюстрация, как это в общих чертах выглядит. Ну а если кратко, то lens – это такая абстрактная цепочка вычислений над данными: извлечение, фильтрация, агрегация и прочее. Ну вот практически то же самое, что написать цепочку вычислений на PyFunctional в отдельной функции.
К слову, небольшая ретроспектива выявила, что fn.py тоже содержит реализацию оптимизации хвостовой рекурсии (я рассказывал про неё в предыдущем посте), правда, неинтуитивную, требующую возвращать из функции tuple, первый элемент которого указывает, шаг рекурсии это или уже результат. Мне не кажется, что это стоит использовать.