dunai
Version 0.13.1 revision 0 uploaded by IvanPerez.
Package meta
- Synopsis
- Generalised reactive framework supporting classic, arrowized and monadic FRP.
- Description
Dunai is a DSL for strongly-typed CPS-based composable transformations.
Dunai is based on a concept of Monadic Stream Functions (MSFs). MSFs are transformations 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.MSFs 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). TheEither
monad gives rise to MSFs 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
toMSF m a b
for a specific transformert
often gives rise to known FRP constructs. For instance, flattening withEitherT
gives rise to switching, and flattening withListT
gives rise to parallelism with broadcasting.MSFs 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 MSFs, see: http://dl.acm.org/citation.cfm?id=2976010 (mirror: http://ivanperez.io/#FRPRefactored).
- Author
- Ivan Perez, Manuel Bärenz
- Bug reports
- n/a
- Category
- Reactivity, FRP
- Copyright
- Copyright (c) 2016 - Ivan Perez and Manuel Bärenz
- Homepage
- https://github.com/ivanperez-keera/dunai
- Maintainer
- ivan.perez@keera.co.uk
- Package URL
- n/a
- Stability
- n/a