Safe Haskell | Safe |
---|---|

Language | Haskell2010 |

Monadic Stream Functions are synchronized stream functions with side effects.

`MSF`

s are defined by a function
`unMSF :: MSF m a b -> a -> m (b, MSF m a b)`

that executes one step of a simulation, and produces an output in a
monadic context, and a continuation to be used for future steps.

See the module Data.MonadicStreamFunction.Core for details.

`MSF`

s are a generalisation of the implementation mechanism used by Yampa,
Wormholes and other FRP and reactive implementations.

When combined with different monads, they produce interesting effects. For
example, when combined with the `Maybe`

monad, they become transformations
that may stop producing outputs (and continuations). The `Either`

monad
gives rise to `MSF`

s that end with a result (akin to Tasks in Yampa, and
Monadic FRP).

Flattening, that is, going from some structure `MSF (t m) a b`

to `MSF m a b`

for a specific transformer `t`

often gives rise to known FRP constructs.
For instance, flattening with `EitherT`

gives rise to switching, and
flattening with `ListT`

gives rise to parallelism with broadcasting.

`MSF`

s can be used to implement many FRP variants, including Arrowized FRP,
Classic FRP, and plain reactive programming. Arrowized and applicative
syntax are both supported.

For a very detailed introduction to `MSF`

s, see:
http://dl.acm.org/citation.cfm?id=2976010
(mirror: http://www.cs.nott.ac.uk/~psxip1/#FRPRefactored).

Apart from the modules exported, this module exports instances from:

# Documentation

module Control.Arrow