IO Monad против Reader Monad

Интересно, есть ли связь между монадой IO и монадой Reader?

Может ли Environment в монаде Reader быть эффектом? Если да, то как ZIO или Cats IO, скалярные эффекты связаны с принципами Reader Monad?


person MaatDeamon    schedule 03.07.2019    source источник


Ответы (1)


Окружение в Reader обычно не является эффектом - это не обязательно.

Чтобы понять почему, вам сначала нужно понять, что Reader монада - это абстракция над функциями A => B, где A - это некая среда.

В общем, если у вас есть эффект F[A], вы всегда можете map значение, используя apply - функцию Reader, верно?

Для cats-effect Reader просто определяется как Kleisli (абстракция над функциями A => F[B]), где F[_] определяется как type F[A] = A. Kleisli предоставляет все необходимое с точки зрения композиции, поэтому Reader были определены как подмножество Kleisli. Подробнее об этом можно узнать здесь.

Для ZIO дела обстоят немного иначе.

Взгляните на определение: ZIO[R, E, A]. Эти три параметра типа описывают среду (R), тип ошибки (E) и тип результата (A).

Это означает, что ZIO уже является комбинацией монад IO и Reader. В ZIO вы можете получить доступ к среде с помощью функции access-.

person Markus Appel    schedule 09.07.2019