Интересно, есть ли связь между монадой IO и монадой Reader?
Может ли Environment в монаде Reader быть эффектом? Если да, то как ZIO или Cats IO, скалярные эффекты связаны с принципами Reader Monad?
Интересно, есть ли связь между монадой IO и монадой Reader?
Может ли Environment в монаде Reader быть эффектом? Если да, то как ZIO или Cats IO, скалярные эффекты связаны с принципами Reader Monad?
Окружение в 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
-.