dunai-0.5: dunai.cabal
name: dunai
version: 0.5
synopsis: Generalised reactive framework supporting classic, arrowized and monadic FRP.
homepage: https://github.com/ivanperez-keera/dunai
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). 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://www.cs.nott.ac.uk/~psxip1/#FRPRefactored>).
license: BSD3
license-file: LICENSE
author: Ivan Perez, Manuel Bärenz
maintainer: ivan.perez@keera.co.uk
-- copyright:
category: Reactivity, FRP
build-type: Simple
-- extra-source-files:
cabal-version: >=1.10
-- You can disable the hlint test suite with -f-test-hlint
flag test-hlint
description: Enable hlint test suite
default: False
manual: True
-- You can disable the haddock coverage test suite with -f-test-doc-coverage
flag test-doc-coverage
description: Enable haddock coverage test suite
default: False
manual: True
library
exposed-modules: Control.Monad.Trans.MSF
Control.Monad.Trans.MSF.Except
Control.Monad.Trans.MSF.Maybe
Control.Monad.Trans.MSF.Random
Control.Monad.Trans.MSF.Reader
Control.Monad.Trans.MSF.RWS
Control.Monad.Trans.MSF.State
Control.Monad.Trans.MSF.Writer
Data.MonadicStreamFunction
Data.MonadicStreamFunction.Core
Data.MonadicStreamFunction.Async
Data.MonadicStreamFunction.Instances.ArrowChoice
Data.MonadicStreamFunction.Instances.ArrowLoop
Data.MonadicStreamFunction.Instances.ArrowPlus
Data.MonadicStreamFunction.Instances.Num
Data.MonadicStreamFunction.Instances.VectorSpace
Data.MonadicStreamFunction.InternalCore
Data.MonadicStreamFunction.Parallel
Data.MonadicStreamFunction.ReactHandle
Data.MonadicStreamFunction.Util
-- Auxiliary definitions
Data.VectorSpace
other-modules: Control.Arrow.Util
build-depends: base >=4.6 && < 5,
transformers,
transformers-base,
MonadRandom
hs-source-dirs: src
default-language: Haskell2010
ghc-options: -Wall -fno-warn-unused-do-bind
test-suite hlint
type: exitcode-stdio-1.0
main-is: hlint.hs
hs-source-dirs: tests
default-language: Haskell2010
if !flag(test-hlint)
buildable: False
else
build-depends:
base,
hlint >= 1.7
-- Verify that the code is thoroughly documented
test-suite haddock-coverage
type: exitcode-stdio-1.0
main-is: HaddockCoverage.hs
ghc-options: -Wall
hs-source-dirs: tests
default-language: Haskell2010
if !flag(test-doc-coverage)
buildable: False
else
build-depends:
base >= 4 && < 5,
directory,
filepath,
process,
regex-posix
source-repository head
type: git
location: git@github.com:ivanperez-keera/dunai.git