packages feed

rhine-1.3: rhine.cabal

cabal-version: 2.2
name: rhine
version: 1.3
synopsis: Functional Reactive Programming with type-level clocks
description:
  Rhine is a library for synchronous and asynchronous Functional Reactive Programming (FRP).
  It separates the aspects of clocking, scheduling and resampling
  from each other, and ensures clock-safety on the type level.
  Signal processing units can be annotated by clocks,
  which hold the information when data will be
  input, processed and output.
  Different components of the signal network
  will become active at different times, or work
  at different rates.
  To schedule the components and allow them to communicate,
  several standard scheduling and resampling solutions are implemented.
  Own schedules and resampling buffers can be implemented in a reusable fashion.
  A (synchronous) program outputting "Hello World!" every tenth of a second looks like this:
  @flow $ constMCl (putStrLn "Hello World!") \@\@ (waitClock :: Millisecond 100)@

license: BSD-3-Clause
license-file: LICENSE
author: Manuel Bärenz
maintainer: maths@manuelbaerenz.de
category: FRP
build-type: Simple
extra-source-files: ChangeLog.md
extra-doc-files: README.md
data-files:
  bench/pg100.txt
  test/assets/*.txt

tested-with:
  ghc ==9.0.2
  ghc ==9.2.8
  ghc ==9.4.7
  ghc ==9.6.4
  ghc ==9.8.2

source-repository head
  type: git
  location: https://github.com/turion/rhine.git

source-repository this
  type: git
  location: https://github.com/turion/rhine.git
  tag: v1.3

common opts
  build-depends:
    automaton ^>=1.3,
    base >=4.14 && <4.20,
    monad-schedule ^>=0.1.2,
    mtl >=2.2 && <2.4,
    selective ^>=0.7,
    text >=1.2 && <2.2,
    time >=1.8,
    transformers >=0.5,
    vector-sized >=1.4,

  if flag(dev)
    ghc-options: -Werror
  ghc-options:
    -W
    -Wno-unticked-promoted-constructors

  default-extensions:
    Arrows
    DataKinds
    FlexibleContexts
    FlexibleInstances
    ImportQualifiedPost
    MultiParamTypeClasses
    NamedFieldPuns
    NoStarIsType
    TupleSections
    TypeApplications
    TypeFamilies
    TypeOperators

  -- Base language which the package is written in.
  default-language: Haskell2010

common test-deps
  build-depends:
    QuickCheck ^>=2.14,
    tasty >=1.4 && <1.6,
    tasty-hunit ^>=0.10,
    tasty-quickcheck ^>=0.10,

common bench-deps
  build-depends:
    criterion ^>=1.6

library
  import: opts
  exposed-modules:
    FRP.Rhine
    FRP.Rhine.ClSF
    FRP.Rhine.ClSF.Core
    FRP.Rhine.ClSF.Except
    FRP.Rhine.ClSF.Random
    FRP.Rhine.ClSF.Reader
    FRP.Rhine.ClSF.Upsample
    FRP.Rhine.ClSF.Util
    FRP.Rhine.Clock
    FRP.Rhine.Clock.Except
    FRP.Rhine.Clock.FixedStep
    FRP.Rhine.Clock.Periodic
    FRP.Rhine.Clock.Proxy
    FRP.Rhine.Clock.Realtime.Audio
    FRP.Rhine.Clock.Realtime.Busy
    FRP.Rhine.Clock.Realtime.Event
    FRP.Rhine.Clock.Realtime.Millisecond
    FRP.Rhine.Clock.Realtime.Never
    FRP.Rhine.Clock.Realtime.Stdin
    FRP.Rhine.Clock.Select
    FRP.Rhine.Clock.Trivial
    FRP.Rhine.Clock.Unschedule
    FRP.Rhine.Clock.Util
    FRP.Rhine.Reactimation
    FRP.Rhine.Reactimation.ClockErasure
    FRP.Rhine.Reactimation.Combinators
    FRP.Rhine.ResamplingBuffer
    FRP.Rhine.ResamplingBuffer.ClSF
    FRP.Rhine.ResamplingBuffer.Collect
    FRP.Rhine.ResamplingBuffer.FIFO
    FRP.Rhine.ResamplingBuffer.Interpolation
    FRP.Rhine.ResamplingBuffer.KeepLast
    FRP.Rhine.ResamplingBuffer.LIFO
    FRP.Rhine.ResamplingBuffer.Timeless
    FRP.Rhine.ResamplingBuffer.Util
    FRP.Rhine.SN
    FRP.Rhine.SN.Combinators
    FRP.Rhine.Schedule
    FRP.Rhine.Type

  other-modules:
    FRP.Rhine.ClSF.Except.Util
    FRP.Rhine.ClSF.Random.Util

  -- LANGUAGE extensions used by modules in this package.
  -- other-extensions:
  -- Other library packages from which modules are imported.
  build-depends:
    MonadRandom >=0.5,
    containers >=0.5,
    deepseq >=1.4,
    free >=5.1,
    mmorph ^>=1.2,
    profunctors ^>=5.6,
    random >=1.1,
    simple-affine-space ^>=0.2,
    sop-core ^>=0.5,
    text >=1.2 && <2.2,
    time >=1.8,
    time-domain ^>=0.1.0.2,
    transformers >=0.5,

  -- Directories containing source files.
  hs-source-dirs: src

test-suite test
  import: opts, test-deps
  hs-source-dirs: test
  type: exitcode-stdio-1.0
  main-is: Main.hs
  other-modules:
    Clock
    Clock.Except
    Clock.FixedStep
    Clock.Millisecond
    Except
    Paths_rhine
    Schedule
    Util

  autogen-modules: Paths_rhine
  build-depends:
    rhine

flag dev
  description: Enable warnings as errors. Active on ci.
  default: False
  manual: True

benchmark benchmark
  import: opts, bench-deps
  type: exitcode-stdio-1.0
  hs-source-dirs: bench
  autogen-modules: Paths_rhine
  other-modules:
    Paths_rhine
    Sum
    WordCount

  build-depends:
    rhine

  main-is: Main.hs
  ghc-options:
    -Wall

  if flag(core)
    ghc-options:
      -fforce-recomp
      -ddump-to-file
      -ddump-simpl
      -dsuppress-all
      -dno-suppress-type-signatures
      -dno-suppress-type-applications

test-suite benchmark-test
  import: opts, bench-deps, test-deps
  type: exitcode-stdio-1.0
  hs-source-dirs: bench
  autogen-modules: Paths_rhine
  other-modules:
    Paths_rhine
    Sum
    WordCount

  build-depends:
    rhine

  main-is: Test.hs

flag core
  description: Dump GHC core files for debugging.
  default: False
  manual: True