Yampa-0.13.1: Elegant Functional Reactive Programming Language for Hybrid Systems

Copyright(c) Antony Courtney and Henrik Nilsson Yale University 2003
LicenseBSD-style (see the LICENSE file in the distribution)
Maintainerivan.perez@keera.co.uk
Stabilityprovisional
Portabilitynon-portable (GHC extensions)
Safe HaskellNone
LanguageHaskell98

FRP.Yampa.Hybrid

Contents

Description

Discrete to continuous-time signal functions.

Synopsis

Wave-form generation

hold :: a -> SF (Event a) a #

Zero-order hold.

Converts a discrete-time signal into a continuous-time signal, by holding the last value until it changes in the input signal. The given parameter may be used for time zero, and until the first event occurs in the input signal, so hold is always well-initialized.

>>> embed (hold 1) (deltaEncode 0.1 [NoEvent, NoEvent, Event 2, NoEvent, Event 3, NoEvent])
[1,1,2,2,3,3]

dHold :: a -> SF (Event a) a #

Zero-order hold with a delay.

Converts a discrete-time signal into a continuous-time signal, by holding the last value until it changes in the input signal. The given parameter is used for time zero (until the first event occurs in the input signal), so dHold shifts the discrete input by an infinitesimal delay.

>>> embed (dHold 1) (deltaEncode 0.1 [NoEvent, NoEvent, Event 2, NoEvent, Event 3, NoEvent])
[1,1,1,2,2,3]

trackAndHold :: a -> SF (Maybe a) a #

Tracks input signal when available, holding the last value when the input is Nothing.

This behaves similarly to hold, but there is a conceptual difference, as it takes a signal of input Maybe a (for some a) and not Event.

>>> embed (trackAndHold 1) (deltaEncode 0.1 [Nothing, Nothing, Just 2, Nothing, Just 3, Nothing])
[1,1,2,2,3,3]

dTrackAndHold :: a -> SF (Maybe a) a #

Tracks input signal when available, holding the last value when the input is Nothing, with a delay.

This behaves similarly to hold, but there is a conceptual difference, as it takes a signal of input Maybe a (for some a) and not Event.

>>> embed (dTrackAndHold 1) (deltaEncode 0.1 [Nothing, Nothing, Just 2, Nothing, Just 3, Nothing])
[1,1,1,2,2,3]

Accumulators

accum :: a -> SF (Event (a -> a)) (Event a) #

Given an initial value in an accumulator, it returns a signal function that processes an event carrying transformation functions. Every time an Event is received, the function inside it is applied to the accumulator, whose new value is outputted in an Event.

accumHold :: a -> SF (Event (a -> a)) a #

Zero-order hold accumulator (always produces the last outputted value until an event arrives).

dAccumHold :: a -> SF (Event (a -> a)) a #

Zero-order hold accumulator with delayed initialization (always produces the last outputted value until an event arrives, but the very initial output is always the given accumulator).

accumBy :: (b -> a -> b) -> b -> SF (Event a) (Event b) #

Accumulator parameterized by the accumulation function.

accumHoldBy :: (b -> a -> b) -> b -> SF (Event a) b #

Zero-order hold accumulator parameterized by the accumulation function.

dAccumHoldBy :: (b -> a -> b) -> b -> SF (Event a) b #

Zero-order hold accumulator parameterized by the accumulation function with delayed initialization (initial output sample is always the given accumulator).

accumFilter :: (c -> a -> (c, Maybe b)) -> c -> SF (Event a) (Event b) #

Accumulator parameterized by the accumulator function with filtering, possibly discarding some of the input events based on whether the second component of the result of applying the accumulation function is Nothing or Just x for some x.