Copyright | (c) Antony Courtney and Henrik Nilsson Yale University 2003 |
---|---|

License | BSD-style (see the LICENSE file in the distribution) |

Maintainer | ivan.perez@keera.co.uk |

Stability | provisional |

Portability | non-portable (GHC extensions) |

Safe Haskell | None |

Language | Haskell98 |

- never :: SF a (Event b)
- now :: b -> SF a (Event b)
- after :: Time -> b -> SF a (Event b)
- repeatedly :: Time -> b -> SF a (Event b)
- afterEach :: [(Time, b)] -> SF a (Event b)
- afterEachCat :: [(Time, b)] -> SF a (Event [b])
- delayEvent :: Time -> SF (Event a) (Event a)
- delayEventCat :: Time -> SF (Event a) (Event [a])
- edge :: SF Bool (Event ())
- iEdge :: Bool -> SF Bool (Event ())
- edgeTag :: a -> SF Bool (Event a)
- edgeJust :: SF (Maybe a) (Event a)
- edgeBy :: (a -> a -> Maybe b) -> a -> SF a (Event b)
- notYet :: SF (Event a) (Event a)
- once :: SF (Event a) (Event a)
- takeEvents :: Int -> SF (Event a) (Event a)
- dropEvents :: Int -> SF (Event a) (Event a)
- snap :: SF a (Event a)
- snapAfter :: Time -> SF a (Event a)
- sample :: Time -> SF a (Event a)
- recur :: SF a (Event b) -> SF a (Event b)
- andThen :: SF a (Event b) -> SF a (Event b) -> SF a (Event b)

# Basic event sources

Event source with a single occurrence at time 0. The value of the event is given by the function argument.

:: Time | The time |

-> b | Value to produce at that time |

-> SF a (Event b) |

Event source with a single occurrence at or as soon after (local) time *q*
as possible.

repeatedly :: Time -> b -> SF a (Event b) #

Event source with repeated occurrences with interval q. Note: If the interval is too short w.r.t. the sampling intervals, the result will be that events occur at every sample. However, no more than one event results from any sampling interval, thus avoiding an "event backlog" should sampling become more frequent at some later point in time.

afterEach :: [(Time, b)] -> SF a (Event b) #

Event source with consecutive occurrences at the given intervals. Should more than one event be scheduled to occur in any sampling interval, only the first will in fact occur to avoid an event backlog.

afterEachCat :: [(Time, b)] -> SF a (Event [b]) #

Event source with consecutive occurrences at the given intervals. Should more than one event be scheduled to occur in any sampling interval, the output list will contain all events produced during that interval.

delayEvent :: Time -> SF (Event a) (Event a) #

Delay for events. (Consider it a triggered after, hence *basic*.)

delayEventCat :: Time -> SF (Event a) (Event [a]) #

Delay an event by a given delta and catenate events that occur so closely
so as to be *inseparable*.

A rising edge detector. Useful for things like detecting key presses.
It is initialised as *up*, meaning that events occuring at time 0 will
not be detected.

edgeBy :: (a -> a -> Maybe b) -> a -> SF a (Event b) #

Edge detector parameterized on the edge detection function and initial state, i.e., the previous input sample. The first argument to the edge detection function is the previous sample, the second the current one.