Navigation Menu

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/a5cd6b1a415ae746fe442d8bcc2da9d1 to your computer and use it in GitHub Desktop.
Save dacr/a5cd6b1a415ae746fe442d8bcc2da9d1 to your computer and use it in GitHub Desktop.
ZIO learning - atomic update like operations / published by https://github.com/dacr/code-examples-manager #0925a4d5-b8d9-4995-8d64-5c241958d83b/40407ed29ffda2fc6303ef61939540d22a0ec89
// summary : ZIO learning - atomic update like operations
// 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 : 0925a4d5-b8d9-4995-8d64-5c241958d83b
// created-on : 2021-04-06T09:46:48+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"
// ---------------------
/*
inspired from
- [John A De Goes - ZIO: Next-Generation Effects in Scala](https://www.youtube.com/watch?v=mkSHhsJXjdc)
- +34:00
*/
import zio.*
object Encapsulated extends ZIOAppDefault {
def run = {
// Ref[A] : is a "mutable" cell that contains a reference to an A that may be updated atomically
for {
ref <- Ref.make(0)
incrementers = List.fill(100)(ref.update(_ + 1))
_ <- ZIO.foreachPar(incrementers)(identity)
v <- ref.get
_ <- Console.printLine(v)
} yield v
}
}
Encapsulated.main(Array.empty)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment