Copyright | (c) Ivan Perez and Manuel Baerenz 2016 |
---|---|
License | BSD3 |
Maintainer | ivan.perez@keera.co.uk |
Safe Haskell | Safe-Inferred |
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