Slide 32
Slide 32 text
Naive Effectful Unbounded Queue
30
class EQueue[F[_]: Concurrent, A](
state: Ref[F, Either[Queue[Deferred[F, A]], Queue[A]]]
) { … }
object EQueue {
def apply[F[_]: Concurrent, A]: F[EQueue[F, A]] =
Ref.of[F, Either[Queue[Deferred[F, A]], Queue[A]]]
(Right(Queue.empty)).map(new EQueue[F, A](_))
}
Construction is effectful