Last active
May 25, 2024 08:38
-
-
Save dacr/6c69e74ecce549c9eb14f86689442c10 to your computer and use it in GitHub Desktop.
cats effect example as shown on dedicated typelevel site / published by https://github.com/dacr/code-examples-manager #55065ce7-79b4-4682-8f54-737227aef77b/cc4f939ed1ff489c3a27fedcc88ca60baec0ea70
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// summary : cats effect example as shown on dedicated typelevel site | |
// keywords : scala, cats, effect learning, pure-functional, examples | |
// publish : gist | |
// authors : typelevel, 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 : 55065ce7-79b4-4682-8f54-737227aef77b | |
// created-on : 2022-01-07T14:56:55+01:00 | |
// managed-by : https://github.com/dacr/code-examples-manager | |
// run-with : scala-cli $file | |
// --------------------- | |
//> using scala "3.4.2" | |
//> using dep "org.typelevel::cats-effect:3.5.0" | |
// --------------------- | |
/* | |
EXAMPLE TAKEN FROM CATS Effect home page : https://typelevel.org/cats-effect/ | |
As show in a PNG file : https://typelevel.org/cats-effect/img/hello-printing.png | |
*/ | |
import cats.* | |
import cats.effect.* | |
import cats.effect.std.Random | |
import cats.effect.unsafe.implicits.global | |
import scala.concurrent.duration.* | |
object Hello extends IOApp.Simple { | |
def sleepPrint(word: String, name: String, rand: Random[IO]) = for { | |
delay <- rand.betweenInt(200, 700) | |
_ <- IO.sleep(delay.millis) | |
_ <- IO.println(s"$word, $name") | |
} yield () | |
def run = for { | |
rand <- Random.scalaUtilRandom[IO] | |
_ <- IO.println("What is your name ?") | |
name <- IO.readLine | |
english <- sleepPrint("Hello", name, rand).foreverM.start | |
french <- sleepPrint("Bonjour", name, rand).foreverM.start | |
spanish <- sleepPrint("Hola", name, rand).foreverM.start | |
_ <- IO.sleep(5.seconds) | |
_ <- english.cancel >> french.cancel >> spanish.cancel | |
} yield () | |
} | |
Hello.main(args) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment