Yampa-0.9.6.1: Library for programming hybrid systems.

Copyright (c) Antony Courtney and Henrik Nilsson, Yale University, 2003 BSD-style (see the LICENSE file in the distribution) nilsson@cs.yale.edu provisional portable None Haskell98

FRP.Yampa.Utilities

Description

Derived utility definitions.

ToDo:

• Possibly add impulse :: VectorSpace a k => a -> Event a But to do that, we need access to Event, which we currently do not have.
• The general arrow utilities should be moved to a module FRP.Yampa.Utilities.
• I'm not sure structuring the Yampa "core" according to what is core functionality and what's not is all that useful. There are many cases where we want to implement combinators that fairly easily could be implemented in terms of others as primitives simply because we expect that that implementation is going to be much more efficient, and that the combinators are used sufficiently often to warrant doing this. E.g. `switch` should be a primitive, even though it could be derived from `pSwitch`.
• Reconsider `recur`. If an event source has an immediate occurrence, we'll get into a loop. For example: recur now. Maybe suppress initial occurrences? Initial occurrences are rather pointless in this case anyway.

Synopsis

# Documentation

(^>>) :: Arrow a => (b -> c) -> a c d -> a b d infixr 1

Precomposition with a pure function.

(>>^) :: Arrow a => a b c -> (c -> d) -> a b d infixr 1

Postcomposition with a pure function.

(^<<) :: Arrow a => (c -> d) -> a b c -> a b d infixr 1

Postcomposition with a pure function (right-to-left variant).

(<<^) :: Arrow a => a c d -> (b -> c) -> a b d infixr 1

Precomposition with a pure function (right-to-left variant).

arr2 :: Arrow a => (b -> c -> d) -> a (b, c) d Source

arr3 :: Arrow a => (b -> c -> d -> e) -> a (b, c, d) e Source

arr4 :: Arrow a => (b -> c -> d -> e -> f) -> a (b, c, d, e) f Source

arr5 :: Arrow a => (b -> c -> d -> e -> f -> g) -> a (b, c, d, e, f) g Source

lift0 :: Arrow a => c -> a b c Source

lift1 :: Arrow a => (c -> d) -> a b c -> a b d Source

lift2 :: Arrow a => (c -> d -> e) -> a b c -> a b d -> a b e Source

lift3 :: Arrow a => (c -> d -> e -> f) -> a b c -> a b d -> a b e -> a b f Source

lift4 :: Arrow a => (c -> d -> e -> f -> g) -> a b c -> a b d -> a b e -> a b f -> a b g Source

lift5 :: Arrow a => (c -> d -> e -> f -> g -> h) -> a b c -> a b d -> a b e -> a b f -> a b g -> a b h Source

snap :: SF a (Event a) Source

sample :: Time -> SF a (Event a) Source

recur :: SF a (Event b) -> SF a (Event b) Source

andThen :: SF a (Event b) -> SF a (Event b) -> SF a (Event b) infixr 5 Source

sampleWindow :: Int -> Time -> SF a (Event [a]) Source

parZ :: [SF a b] -> SF [a] [b] Source

pSwitchZ :: [SF a b] -> SF ([a], [b]) (Event c) -> ([SF a b] -> c -> SF [a] [b]) -> SF [a] [b] Source

dpSwitchZ :: [SF a b] -> SF ([a], [b]) (Event c) -> ([SF a b] -> c -> SF [a] [b]) -> SF [a] [b] Source

rpSwitchZ :: [SF a b] -> SF ([a], Event ([SF a b] -> [SF a b])) [b] Source

drpSwitchZ :: [SF a b] -> SF ([a], Event ([SF a b] -> [SF a b])) [b] Source

provided :: (a -> Bool) -> SF a b -> SF a b -> SF a b Source

old_dHold :: a -> SF (Event a) a Source

old_accumHold :: a -> SF (Event (a -> a)) a Source

old_dAccumHold :: a -> SF (Event (a -> a)) a Source

old_accumHoldBy :: (b -> a -> b) -> b -> SF (Event a) b Source

old_dAccumHoldBy :: (b -> a -> b) -> b -> SF (Event a) b Source

count :: Integral b => SF (Event a) (Event b) Source

fby :: b -> SF a b -> SF a b infixr 0 Source