|
Scala example source code file (Chan.scala)
The Chan.scala Scala example source codepackage scalaz package concurrent import MVar._ import effect.IO sealed abstract class Chan[A] { def read: IO[A] def write(a: A): IO[Unit] } object Chan { private[concurrent] type ChStream[A] = MVar[ChItem[A]] def newChan[A]: IO[Chan[A]] = for { hole <- newEmptyMVar[ChItem[A]] readVar <- newMVar(hole) writeVar <- newMVar(hole) } yield new ChanImpl[A](readVar, writeVar) } import Chan._ private[this] case class ChItem[A](a: A, end: ChStream[A]) private[this] class ChanImpl[A](readVar: MVar[ChStream[A]], writeVar: MVar[ChStream[A]]) extends Chan[A] { def read = readVar.modify(readEnd => for { item <- readEnd.read } yield (item.end, item.a)) def write(a: A) = for { newHole <- newEmptyMVar[ChItem[A]] _ <- for { oldHole <- writeVar.take _ <- oldHole.put(ChItem(a, newHole)) _ <- writeVar.put(newHole) } yield () } yield () } Other Scala examples (source code examples)Here is a short list of links related to this Scala Chan.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.