Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sealed trait IO[+A] { self =>
- def run: A
- def map[B](f: A => B): IO[B] =
- flatMap(a => IO.unit(f(a)))
- def flatMap[B](f: A => IO[B]): IO[B] =
- new IO[B] {
- def run = f(self.run).run
- }
- }
- object IO {
- def unit[A](a: A): IO[A] = new IO[A] { def run = a }
- }
- case object ReadLine extends IO[String] {
- def run = { readLine }
- }
- case class WriteLine(msg: String) extends IO[Unit] {
- def run = { println(msg) }
- }
- abstract class Application {
- def universe: IO[Unit]
- def main(args: Array[String]) {
- universe.run
- }
- }
- object Main extends Application {
- def universe =
- for {
- l <- ReadLine
- _ <- WriteLine(l)
- } yield ()
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement