Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
The type of a complete Rhine program: A signal network together with a matching clock value.
Synopsis
- data Rhine m cl a b = Rhine {}
- eraseClock :: (Monad m, Clock m cl, GetClockProxy cl) => Rhine m cl a b -> m (Automaton m a (Maybe b))
- 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
Documentation
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
.
Instances
GetClockProxy cl => ToClockProxy (Rhine m cl a b) Source # | |
Defined in FRP.Rhine.Type toClockProxy :: Rhine m cl a b -> ClockProxy (Cl (Rhine m cl a b)) Source # | |
type Cl (Rhine m cl a b) Source # | |
Defined in FRP.Rhine.Type |
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
ticks,
the input In
cla
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.