rhine- Functional Reactive Programming with type-level clocks

Safe HaskellNone



Asynchronous signal networks are combinations of clocked signal functions (ClSFs) and matching ResamplingBuffers, all satisfying the appropriate clock type constraints.

This module defines the SN type, combinators are found in a submodule.



data SN m cl a b where Source #

An SN is a side-effectful asynchronous signal network, where input, data processing (including side effects) and output need not happen at the same time.

The type parameters are:

  • m: The monad in which side effects take place.
  • cl: The clock of the whole signal network. It may be sequentially or parallely composed from other clocks.
  • a: The input type. Input arrives at the rate In cl.
  • b: The output type. Output arrives at the rate Out cl.


Synchronous :: (cl ~ In cl, cl ~ Out cl) => ClSF m cl a b -> SN m cl a b

A synchronous monadic stream function is the basic building block. For such an SN, data enters and leaves the system at the same rate as it is processed.

Sequential :: (Clock m clab, Clock m clcd, Time clab ~ Time clcd, Time clab ~ Time (Out clab), Time clcd ~ Time (In clcd)) => SN m clab a b -> ResamplingBuffer m (Out clab) (In clcd) b c -> SN m clcd c d -> SN m (SequentialClock m clab clcd) a d

Two SNs may be sequentially composed if there is a matching ResamplingBuffer between them.

Parallel :: (Clock m cl1, Clock m cl2, Time cl1 ~ Time (Out cl1), Time cl2 ~ Time (Out cl2), Time cl1 ~ Time cl2, Time cl1 ~ Time (In cl1), Time cl2 ~ Time (In cl2)) => SN m cl1 a b -> SN m cl2 a b -> SN m (ParallelClock m cl1 cl2) a b

Two SNs with the same input and output data may be parallely composed.