ZIO, Обеспечьте среду из Эффекта

Начиная с ZIO, я пытаюсь преобразовать существующее приложение в чисто функциональное. Это приложение зависит от клиента Http и Frp. Оба они настраиваются из файла конфигурации и дополнительных аргументов командной строки.

Текущий поток анализирует аргументы, затем читает файл конфигурации и объединяет оба. РезультирующийConfiguration передается некоторым компонентам, которым нужен клиент Http и Ftp.

Теперь, если я хочу преобразовать это в ZIO, я могу наивно создать такой поток:

val flow = for {
  options <- ZIO.succeed("Options")
  configs <- ZIO.succeed(s"Config + $options")
  result  <- ZIO.succeed("...") // This require the "configs"
} yield ()

К сожалению, я не могу предоставить configs поскольку он производится для самого понимания.

У меня вопрос: как мы можем обеспечить результат одного эффекта в виде окружающей среды?

1 ответ

Решение

Ты можешь сделать .provide(configs), почему бы нет?

В более общем плане вы можете сделать io1.flatMap(io2.provide) запустить эффект io1 а затем предоставить результат другому эффекту io2. Для этого есть даже ярлык:io1 >>> io2.

Другие вопросы по тегам