Bezdepbonusu7Программирование: статьи и ответы

Понимание Kleisli в Scala

Архив Bezdepbonusu72 мин чтения

Это первая из серии статей, посвященных изучению типа данных с самым странным названием во всех языках программирования, за исключением, возможно, Yoneda. Недавно я обнаружил, что на самом деле это простой для понимания и довольно полезный инструмент, поэтому в этом посте я расскажу об основах, а в следующих покажу несколько примеров из реальной жизни.

Прежде всего: мое объяснение может быть не очень хорошим и, вероятно, будет неполным. Для лучшего знакомства, чем это, могу порекомендовать только Cats Kleisli и sanj.ink (автор картинки выше)

4-9.

Этот пример начинается с нескольких функций, анализирующих и взаимодействующих, которые переходят от примитивного типа (String, Int) к типу высокого порядка (Option[Int ], Option[Double]). Все идет нормально.

10-13.

Основные примеры использования этих функций.

16.

Вот тут и начинается проблема. Если вы хотите составить обе функции, вы не можете использовать compose или даже делать это как переменную, как исходные. Вместо этого вы должны объявить функцию и начать вложение flatMaps, что сильно ухудшает читабельность.

21.

Вот как объявляется Kleisli: тип с тремя параметрами типа и функцией "run". Что это означает? Легкий! Он инкапсулирует функцию, которая получает аргумент типа A и возвращает тип F[B], A=› F[B]. Вскоре мы увидим, почему это здорово.

22.

Эта функция аналогична функции в строке 4, но объявлена ​​как тип Kleisli. Обязательный аргумент run объявлен как анонимная функция, которая получает строку S и возвращает Option[Int].

25.

Конечно, параметр run может быть уже существующей функцией.

28-31

Использование переменной типа Kleisli точно такое же, как если бы это была стандартная функция.

33.

Kleisli хорош тем, что предоставляет множество полезных инструментов. Например, andThen обеспечивает композицию. В этом случае andThen обеспечивает композицию, поэтому полученная составная функция может быть объявлена ​​как переменная, как и исходные.

35-36

В качестве примечания, функцию run можно выполнить явно или путем ее вызова.

После этого краткого введения в Kleisli - опять же, не забудьте проверить Cats Kleisli и sanj.ink для лучшего описания - в следующих постах я покажу некоторые из более мощных возможностей этого класса и как мы их используем. это в реальных приложениях.

РЕДАКТИРОВАТЬ: я написал вторую статью, в которой рассказывается об использовании этого в реальном мире: Применение Scala Kleisli в реальном мире: внедрение зависимостей

РЕДАКТИРОВАТЬ 2: еще один: Реальные приложения Scala Kleisli: конфигурация

Functional ProgrammingScalaBackendProgrammingSoftware Development

Похожие материалы

Статья из архива сайта: перевод и редактура материала сообщества разработчиков. Версии библиотек и инструментов могли измениться, сверяйтесь с официальной документацией.