packages feed

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