IO Monad vs Reader Monad
Интересно, есть ли связь между IO Monad и Read Monad?
Может ли окружение в монаде Reader быть эффектом? Если да, то как ZIO или Cats IO, скалярные эффекты работают с принципами Reader Monad?
1 ответ
Окружающая среда в Reader
обычно это не эффект - это не обязательно.
Чтобы понять почему, сначала нужно понять, что Reader
монада это абстракция над функциями A => B
, где A
это какая-то среда.
В общем, если у вас есть эффект F[A]
, Вы всегда можете map
значение с использованием Reader
"s apply
- функция, верно?
За cats-effect
, Reader
просто определяется как Kleisli
(абстракция над функциями A => F[B]
) с участием F[_]
определяется как type F[A] = A
, Kleisli
предоставляет все, что вам нужно с точки зрения композиции, поэтому Reader
были определены как подмножество Kleisli
s. Вы можете прочитать больше об этом здесь.
За ZIO
, все выглядит немного иначе.
Взгляните на определение: ZIO[R, E, A]
, Эти три параметра типа описывают среду (R
), тип ошибки (E
) и тип результата (A
).
Это значит, что ZIO
это уже комбинация IO
а также Reader
монады. В ZIO
, вы можете получить доступ к среде, используя access
функция.