IO Monad vs Reader Monad - PullRequest
       86

IO Monad vs Reader Monad

1 голос
/ 03 июля 2019

Интересно, есть ли связь между IO Monad и Read monad?

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

1 Ответ

2 голосов
/ 09 июля 2019

Окружение в 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 - функцию.

...