bearriver-0.14.4: src/FRP/BearRiver/InternalCore.hs
-- |
-- Module : FRP.Dunai.InternalCore
-- Copyright : (c) Ivan Perez, 2014-2022
-- (c) George Giorgidze, 2007-2012
-- (c) Henrik Nilsson, 2005-2006
-- (c) Antony Courtney and Henrik Nilsson, Yale University, 2003-2004
-- License : BSD-style (see the LICENSE file in the distribution)
--
-- Maintainer : ivan.perez@keera.co.uk
-- Stability : provisional
-- Portability : non-portable (GHC extensions)
--
-- Domain-specific language embedded in Haskell for programming hybrid (mixed
-- discrete-time and continuous-time) systems, extended with Monads.
--
-- Bearriver (a tributary to the Yampa river) provides the same API as Yampa,
-- but implemented using Monadic Stream Functions underneath. SFs in BearRiver
-- take an additional monad as argument. The introduction of time is done by
-- means of an additional Reader layer.
module FRP.BearRiver.InternalCore
( module Control.Arrow
-- * Basic definitions
-- ** Time
, Time
, DTime
-- ** Signal Functions
, SF
, ClockInfo
)
where
-- External imports
import Control.Arrow (Arrow (..), ArrowChoice (..), ArrowLoop (..), (>>>))
-- Internal imports (dunai)
import Control.Monad.Trans.MSF (ReaderT)
import Data.MonadicStreamFunction (MSF)
-- * Basic type definitions with associated utilities
-- | Time is used both for time intervals (duration), and time w.r.t. some
-- agreed reference point in time.
type Time = Double
-- | DTime is the time type for lengths of sample intervals. Conceptually,
-- DTime = R+ = { x in R | x > 0 }. Don't assume Time and DTime have the same
-- representation.
type DTime = Double
-- | Extensible signal function (signal function with a notion of time, but
-- which can be extended with actions).
--
-- Signal function that transforms a signal carrying values of some type 'a'
-- into a signal carrying values of some type 'b'. You can think of it as
-- (Signal a -> Signal b). A signal is, conceptually, a function from 'Time' to
-- value.
type SF m = MSF (ClockInfo m)
-- | Information on the progress of time.
type ClockInfo m = ReaderT DTime m