My fs2 (was scalaz-stream) User Notes
  • Introduction
  • Foundations
  • Design Patterns
    • Category Theory Express Design Patterns
    • Category Theory
      • Semigroup
      • Monoid
      • Functor
      • Applicative
      • Products\/Coproducts
      • Monad
      • Free Monad
    • Category Theory for fs2
  • fs2 Core Model
    • Streams and Graphs
    • Composability
    • API
    • Effects
      • fs2 Effects
    • Smart Constructors and Combinators
  • fs2 Basics
    • Technical Setup
    • Simple Streams
    • Effectful Streams
    • Error Handling and Resource Management
    • Sinks
    • Channels and Exchanges
    • Combining Streams: Wye and Tee
    • Refs
  • Cookbook
    • Recipe: onFinish for Task
    • Recipe: Changing Seq[A] to A
    • Recipe: Debugging with toString
    • Recipe: Retrieving Web Pages
    • Recipe: Converting an Iterator to a Stream
    • Recipe: Data-Driven Stream
    • Recipe: Evaluate a Task Periodically
    • Recipe: Delay running a stream
    • Recipe: Stop an infinite Stream when you want to
    • Recipe: CSV Parsing with univocity
    • Recipe: CSV Parsing with node.js csv-parse using Readable => Stream
  • fs2 Examples
    • Akka Examples
    • Cafe
    • More Than One Stream
Powered by GitBook
On this page

Was this helpful?

  1. fs2 Basics

Refs

Refs provide concurrency support for effect types. In fs2, the effect type is often a Task. However, effect types are also Options, Futures and even Lists (the effect of multiple choice/options). Really, an effect is usually a container of a value that may have other characteristics e.g. asynchronous creation of that value. Refs are more of an implementation detail compared to the streams api.

Refs use a "messaging" model to set or get the value in a Ref. Underneath the hood, you can think of it is as actor model for one value. Actors were designed, among other things, to protect state behind a wall of "messages." If you try to get or set the value inside a Ref, a message is sent internally to perform the get or set. Messages can be processed in order so that the stream of get/set messages are processed in a sensible fashion.

PreviousCombining Streams: Wye and TeeNextCookbook

Last updated 5 years ago

Was this helpful?