Skip to content

Instantly share code, notes, and snippets.

@dacr
Last active May 6, 2023 15:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dacr/b93514e48fbe079a32fedbe0685c784f to your computer and use it in GitHub Desktop.
Save dacr/b93514e48fbe079a32fedbe0685c784f to your computer and use it in GitHub Desktop.
ZIO learning - composing environments / published by https://github.com/dacr/code-examples-manager #c265c5e9-5189-4ce1-bc82-8a93fd0cee60/4d57bf9352afa2f7b3d4afb2cbe2693f7a42d660
// summary : ZIO learning - composing environments
// keywords : scala, zio, learning, pure-functional, @testable
// publish : gist
// authors : David Crosson
// license : Apache NON-AI License Version 2.0 (https://raw.githubusercontent.com/non-ai-licenses/non-ai-licenses/main/NON-AI-APACHE2)
// id : c265c5e9-5189-4ce1-bc82-8a93fd0cee60
// created-on : 2021-04-02T16:10:43+02:00
// managed-by : https://github.com/dacr/code-examples-manager
// run-with : scala-cli $file
// ---------------------
//> using scala "3.2.2"
//> using dep "dev.zio::zio:2.0.13"
//> using dep "fr.janalyse::zio-worksheet:2.0.13.0"
// ---------------------
import zio.*, zio.worksheet.*
val logic: ZIO[Console & Random, Throwable, Unit] = for {
name <- ZIO.succeed("toto")
_ <- ZIO.logInfo(s"got name value : $name")
num <- Random.nextIntBetween(1,42)
_ <- Console.printLine(s"Hello $name")
_ <- ZIO.logInfo(s"$name processed")
} yield ()
// -------------------------------------------------------------
// Of course this is now useless as Console, System, Random, ...
// belong to the default environment and are now provided by default
// it was not the case in early ZIO releases
val layers = ZLayer.succeed(Console.ConsoleLive) ++ ZLayer.succeed(Random.RandomLive)
logic.provide(layers).unsafeRun
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment