Окружение в Reader
обычно не является эффектом - оно не должно быть.
Чтобы понять почему, сначала нужно понять, что монада Reader
- это абстракция над функциями A => B
, где A
- это некая среда.
Как правило, если у вас есть эффект F[A]
, вы всегда можете map
значение, используя Reader
- 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
- функцию.