bluefin-0.0.6.0: The Bluefin effect system
Safe HaskellSafe-Inferred
LanguageHaskell2010

Bluefin.Coroutine

Synopsis

Documentation

Coroutine allows to yield values and receive results back. Wikipedia suggests that Bluefin's coroutines are "second-class stackful coroutines". This module is not documented yet. You might want to start with Bluefin.Stream, which is the most common way to use coroutines.

Handle

data Coroutine a b (s :: Effects) #

A handle to a coroutine that expects values of type a and then yields values of type b.

Instances

Instances details
Handle (Coroutine a b) 
Instance details

Defined in Bluefin.Internal

Methods

mapHandle :: forall (e :: Effects) (es :: Effects). e :> es => Coroutine a b e -> Coroutine a b es #

Handlers

forEach #

Arguments

:: forall a b (es :: Effects) r. (forall (e1 :: Effects). Coroutine a b e1 -> Eff (e1 :& es) r) 
-> (a -> Eff es b)

Apply this effectful function for each element of the coroutine

-> Eff es r 
>>> runPureEff $ yieldToList $ \y -> do
      forEach (inFoldable [0 .. 3]) $ \i -> do
        yield y i
        yield y (i * 10)
([0, 0, 1, 10, 2, 20, 3, 30], ())

Effectful operations

yieldCoroutine #

Arguments

:: forall (e1 :: Effects) (es :: Effects) a b. e1 :> es 
=> Coroutine a b e1 
-> a

͘

-> Eff es b