# Control.Coroutine

- Package
- purescript-coroutines
- Repository
- purescript-contrib/purescript-coroutines

This module defines types and functions for working with coroutines. Coroutines are defined based on some underlying functor, which means that the same machinery can be used for coroutines which emit values, await values, fork, join, or any combination.

### #runProcess Source

`runProcess :: forall m a. MonadRec m => Process m a -> m a`

Run a `Process`

to completion.

### #Transformer Source

`type Transformer :: Type -> Type -> (Type -> Type) -> Type -> Type`

`type Transformer i o = Co (Transform i o)`

A type synonym for a `Co`

routine which transforms values.

### #transform Source

`transform :: forall m i o. Monad m => (i -> o) -> Transformer i o m Unit`

Transform input values.

### #CoTransform Source

`data CoTransform i o a`

A generating functor which yields a value before waiting for an input.

#### Constructors

`CoTransform o (i -> a)`

#### Instances

`Bifunctor (CoTransform i)`

`Functor (CoTransform i o)`

### #CoTransformer Source

`type CoTransformer :: Type -> Type -> (Type -> Type) -> Type -> Type`

`type CoTransformer i o = Co (CoTransform i o)`

A type synonym for a `Co`

routine which "cotransforms" values, emitting an output
before waiting for its input.

### #cotransform Source

`cotransform :: forall m i o. Monad m => o -> CoTransformer i o m i`

Cotransform input values.

### #transformProducer Source

`transformProducer :: forall i o f m a. MonadRec m => Parallel f m => Producer i m a -> Transformer i o m a -> Producer o m a`

Transform a producer.

### #($~) Source

Operator alias for Control.Coroutine.transformProducer *(right-associative / precedence 2)*

### #transformConsumer Source

`transformConsumer :: forall i o f m a. MonadRec m => Parallel f m => Transformer i o m a -> Consumer o m a -> Consumer i m a`

Transform a consumer.

### #(~$) Source

Operator alias for Control.Coroutine.transformConsumer *(right-associative / precedence 2)*

### #composeTransformers Source

`composeTransformers :: forall i j k f m a. MonadRec m => Parallel f m => Transformer i j m a -> Transformer j k m a -> Transformer i k m a`

Compose transformers

### #(~~) Source

Operator alias for Control.Coroutine.composeTransformers *(right-associative / precedence 2)*

### #composeCoTransformers Source

`composeCoTransformers :: forall i j k f m a. MonadRec m => Parallel f m => CoTransformer i j m a -> CoTransformer j k m a -> CoTransformer i k m a`

Compose cotransformers

### #fuseCoTransform Source

`fuseCoTransform :: forall i o f m a. MonadRec m => Parallel f m => Transformer i o m a -> CoTransformer o i m a -> Process m a`

Fuse a transformer and a cotransformer.

### #transformCoTransformL Source

`transformCoTransformL :: forall i1 i2 o f m a. MonadRec m => Parallel f m => Transformer i1 i2 m a -> CoTransformer i2 o m a -> CoTransformer i1 o m a`

Transform a `CoTransformer`

on the left.

### #transformCoTransformR Source

`transformCoTransformR :: forall i o1 o2 f m a. MonadRec m => Parallel f m => CoTransformer i o1 m a -> Transformer o1 o2 m a -> CoTransformer i o2 m a`

Transform a `CoTransformer`

on the right.

- Modules
- Control.
Coroutine