2015-03-24 11 views
13

В ScalazЯвляется ли это просто совпадение, что Клейсли, ReaderT и чтения являются одинаковыми в Scalaz

  • Kleisli[F, A, B] является оболочкой для A => F[B].
  • ReaderT[F, A, B] - считыватель monad transformer - это просто псевдоним Kleisli[F, A, B].
  • Reader[A, B] монада является конкретизацией ReaderT с единицей монады Id:
    type Reader[A, B] = ReaderT[Id, A, B].

Является ли это просто совпадение или есть некоторые глубже причины, Kleisli, ReaderT и Reader изоморфны в Scalaz?

+2

Reader и ReaderT/Kleisli не являются изоморфными (как вы сказали, первый из них является специализацией последнего). – ZhekaKozlov

+0

@ZhekaKozlov Спасибо. Я был не прав (не будет обновлять вопрос, хотя). – Michael

ответ

21

Вы можете думать о нем как о прибытии в одно и то же место по двум различным маршрутам. С одной стороны вы начинаете с монады-читателя, которая является просто своего рода оболочкой для функций. Затем вы понимаете, что хотите интегрировать эту функцию читателя в большую монаду с другими «эффектами», поэтому вы создаете трансформатор монады ReaderT. В этот момент имеет смысл реализовать ваш оригинал Reader[E, ?] как ReaderT[Id, E, ?].

С другой стороны, вы хотите, чтобы тип представлял стрелки Kleisli (т. Е. Функции с монадическим типом возврата). Оказывается, это то же самое, что и ReaderT, поэтому вы просто делаете это псевдоним.

Нет ничего страшного таинственного в части «получится». Это немного похоже на то, что вы начали с класса типа Addable для числовых вещей, а затем решили сделать его более универсальным и, в конечном итоге, получили класс типа, который просто предоставляет ассоциативную операцию с добавлением. Вы заново изобрели Semigroup! Вы все равно можете сохранить имя Addable, хотя, по историческим или педагогическим причинам, или просто для удобства.

Это все, что происходит с Reader и ReaderT -выми не нужно этих псевдонимов, но они могут быть удобны, и могут помочь улучшить ясность вашего кода.

+1

Вы можете найти пример того, что объясняет здесь Тревис: http://eed3si9n.com/learning-scalaz/Composing+monadic+functions.html – ssanj

 Смежные вопросы

  • Нет связанных вопросов^_^