bluefin-0.6.0.0: The Bluefin effect system
Safe HaskellNone
LanguageHaskell2010

Bluefin.Consume

Description

This is an old interface and will be deprecated in the future. You are encouraged to use Bluefin.Capability.Await instead.

Synopsis

Documentation

Consume allows you to await values during the execution of a Bluefin operation. It provides similar functionality to await from Conduit or Pipes.

For information about prompt finalization/resource safety when using Bluefin Consumes, see Bluefin.Coroutine.

Handle

type Consume a = Coroutine () a #

Handlers

consumeEach #

Arguments

:: forall b (es :: Effects) r. (forall (e :: Effects). Consume b e -> Eff (e :& es) r)

Body

-> Eff es b

Value to send to each await in the body.

-> Eff es r 

A version of forEach specialized to Consume. Every time the Consume is used to await a b, feed it the one created by the handler.

consumeStream #

Arguments

:: forall a (es :: Effects) r. (forall (e :: Effects). Consume a e -> Eff (e :& es) r)

Each await from the Consume ...

-> (forall (e :: Effects). Stream a e -> Eff (e :& es) r)

... receives the value yielded from the Stream

-> Eff es r 

streamConsume #

Arguments

:: forall a (es :: Effects) r. (forall (e :: Effects). Stream a e -> Eff (e :& es) r) 
-> (forall (e :: Effects). Consume a e -> Eff (e :& es) r) 
-> Eff es r

͘

Argument-flipped version of consumeStream

Effectful operations

await :: forall (e :: Effects) (es :: Effects) a. e <: es => Consume a e -> Eff es a #

takeConsume #

Arguments

:: forall (e1 :: Effects) (es :: Effects) (e2 :: Effects) a. (e1 <: es, e2 <: es) 
=> Int 
-> Consume a e1 
-> Stream a e2 
-> Eff es ()

͘

runPureEff $ yieldToList $ yOut -> do
  consumeStream
    (\c -> takeConsume 4 c yOut)
    (\yIn -> inFoldable [1..10] yIn)
([1,2,3,4],())