rhine-1.0: 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 a monadic stream function, 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 (MSF 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.