dunai: Generalised reactive framework supporting classic, arrowized and monadic FRP.
This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.
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). The Either
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
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.
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).
Properties
Versions | 0.0.1.0, 0.1.0.0, 0.1.1.0, 0.2.0.0, 0.3.0.0, 0.4.0.0, 0.5, 0.5.1, 0.5.2, 0.5.2.1, 0.6.0, 0.7.0, 0.8.0, 0.8.1, 0.8.2, 0.8.3, 0.9.0, 0.9.1, 0.9.2, 0.10.0, 0.10.1, 0.11.0, 0.11.1, 0.11.2, 0.12.0, 0.12.1, 0.12.2, 0.12.3, 0.13.0, 0.13.1, 0.13.2, 0.13.2, 0.14.0 |
---|---|
Change log | CHANGELOG |
Dependencies | base (>=4.6 && <5), list-transformer (>=1.1.1 && <1.2), MonadRandom (>=0.2 && <0.7), simple-affine-space (>=0.2 && <0.3), transformers (>=0.3 && <0.7), transformers-base (>=0.4 && <0.5), transformers-compat (>=0.3 && <0.8), void (>=0.1 && <0.8) [details] |
License | BSD-3-Clause |
Copyright | Copyright (c) 2016 - Ivan Perez and Manuel Bärenz |
Author | Ivan Perez, Manuel Bärenz |
Maintainer | ivan.perez@keera.co.uk |
Category | Reactivity, FRP |
Home page | https://github.com/ivanperez-keera/dunai |
Source repo | head: git clone git@github.com:ivanperez-keera/dunai.git(dunai) |
Uploaded | by keera_studios_ci_dunai at 2024-10-22T03:53:35Z |
Modules
[Index] [Quick Jump]
Flags
Manual Flags
Name | Description | Default |
---|---|---|
test-hlint | Enable hlint test suite | Disabled |
test-doc-coverage | Enable haddock coverage test suite | Disabled |
Automatic Flags
Name | Description | Default |
---|---|---|
list-transformer | Use list-transformer instead of transformers to implement the ListT combinators | Disabled |
Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info
Downloads
- dunai-0.13.2.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
Package maintainers
For package maintainers and hackage trustees