rhine-1.3: Functional Reactive Programming with type-level clocks
Safe HaskellSafe-Inferred
LanguageHaskell2010

FRP.Rhine.Type

Description

The type of a complete Rhine program: A signal network together with a matching clock value.

Synopsis

Documentation

data Rhine m cl a b Source #

A Rhine consists of a SN together with a clock of matching type cl.

It is a reactive program, possibly with open inputs and outputs. If the input and output types a and b are both (), that is, the Rhine is "closed", then it is a standalone reactive program that can be run with the function flow.

Otherwise, one can start the clock and the signal network jointly as an automaton, using eraseClock.

Constructors

Rhine 

Fields

Instances

Instances details
GetClockProxy cl => ToClockProxy (Rhine m cl a b) Source # 
Instance details

Defined in FRP.Rhine.Type

Associated Types

type Cl (Rhine m cl a b) Source #

Methods

toClockProxy :: Rhine m cl a b -> ClockProxy (Cl (Rhine m cl a b)) Source #

type Cl (Rhine m cl a b) Source # 
Instance details

Defined in FRP.Rhine.Type

type Cl (Rhine m cl a b) = cl

eraseClock :: (Monad m, Clock m cl, GetClockProxy cl) => Rhine m cl a b -> m (Automaton m a (Maybe b)) Source #

Start the clock and the signal network, effectively hiding the clock type from the outside.

Since the caller will not know when the clock In cl ticks, the input a has to be given at all times, even those when it doesn't tick.

feedbackRhine :: (Clock m (In cl), Clock m (Out cl), Time (In cl) ~ Time cl, Time (Out cl) ~ Time cl) => ResamplingBuffer m (Out cl) (In cl) d c -> Rhine m cl (a, c) (b, d) -> Rhine m cl a b Source #

Loop back data from the output to the input.

Since output and input will generally tick at different clocks, the data needs to be resampled.