Copyright | Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com> |
---|---|
License | BSD3 |
Maintainer | David Sorokin <david.sorokin@gmail.com> |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
Tested with: GHC 7.10.1
This module defines the signal which we can subscribe handlers to. These handlers can be disposed. The signal is triggered in the current time point actuating the corresponded computations from the handlers.
- data Signal m a = Signal {
- handleSignal :: (a -> Event m ()) -> Event m (DisposableEvent m)
- handleSignal_ :: MonadDES m => Signal m a -> (a -> Event m ()) -> Event m ()
- data SignalSource m a
- newSignalSource :: MonadDES m => Simulation m (SignalSource m a)
- newSignalSource0 :: (MonadDES m, MonadRef0 m) => m (SignalSource m a)
- publishSignal :: SignalSource m a -> Signal m a
- triggerSignal :: SignalSource m a -> a -> Event m ()
- mapSignal :: MonadDES m => (a -> b) -> Signal m a -> Signal m b
- mapSignalM :: MonadDES m => (a -> Event m b) -> Signal m a -> Signal m b
- apSignal :: MonadDES m => Event m (a -> b) -> Signal m a -> Signal m b
- filterSignal :: MonadDES m => (a -> Bool) -> Signal m a -> Signal m a
- filterSignal_ :: MonadDES m => (a -> Bool) -> Signal m a -> Signal m ()
- filterSignalM :: MonadDES m => (a -> Event m Bool) -> Signal m a -> Signal m a
- filterSignalM_ :: MonadDES m => (a -> Event m Bool) -> Signal m a -> Signal m ()
- emptySignal :: MonadDES m => Signal m a
- merge2Signals :: MonadDES m => Signal m a -> Signal m a -> Signal m a
- merge3Signals :: MonadDES m => Signal m a -> Signal m a -> Signal m a -> Signal m a
- merge4Signals :: MonadDES m => Signal m a -> Signal m a -> Signal m a -> Signal m a -> Signal m a
- merge5Signals :: MonadDES m => Signal m a -> Signal m a -> Signal m a -> Signal m a -> Signal m a -> Signal m a
- arrivalSignal :: MonadDES m => Signal m a -> Signal m (Arrival a)
- delaySignal :: MonadDES m => Double -> Signal m a -> Signal m a
- delaySignalM :: MonadDES m => Event m Double -> Signal m a -> Signal m a
- newSignalInTimes :: MonadDES m => [Double] -> Event m (Signal m Double)
- newSignalInIntegTimes :: MonadDES m => Event m (Signal m Double)
- newSignalInStartTime :: MonadDES m => Event m (Signal m Double)
- newSignalInStopTime :: MonadDES m => Event m (Signal m Double)
- data Signalable m a = Signalable {
- readSignalable :: Event m a
- signalableChanged_ :: Signal m ()
- signalableChanged :: MonadDES m => Signalable m a -> Signal m a
- emptySignalable :: (MonadDES m, Monoid a) => Signalable m a
- appendSignalable :: (MonadDES m, Monoid a) => Signalable m a -> Signalable m a -> Signalable m a
- traceSignal :: MonadDES m => String -> Signal m a -> Signal m a
Handling and Triggering Signal
The signal that can have disposable handlers.
Signal | |
|
handleSignal_ :: MonadDES m => Signal m a -> (a -> Event m ()) -> Event m () Source
Subscribe the handler to the specified signal forever.
To subscribe the disposable handlers, use function handleSignal
.
data SignalSource m a Source
The signal source that can publish its signal.
newSignalSource :: MonadDES m => Simulation m (SignalSource m a) Source
Create a new signal source.
newSignalSource0 :: (MonadDES m, MonadRef0 m) => m (SignalSource m a) Source
Create a new signal source within more low level computation than Simulation
.
publishSignal :: SignalSource m a -> Signal m a Source
Publish the signal.
triggerSignal :: SignalSource m a -> a -> Event m () Source
Trigger the signal actuating all its handlers at the current simulation time point.
Useful Combinators
mapSignal :: MonadDES m => (a -> b) -> Signal m a -> Signal m b Source
Map the signal according the specified function.
filterSignal :: MonadDES m => (a -> Bool) -> Signal m a -> Signal m a Source
Filter only those signal values that satisfy the specified predicate.
filterSignal_ :: MonadDES m => (a -> Bool) -> Signal m a -> Signal m () Source
Filter only those signal values that satisfy the specified predicate, but then ignoring the values.
filterSignalM :: MonadDES m => (a -> Event m Bool) -> Signal m a -> Signal m a Source
Filter only those signal values that satisfy the specified predicate.
filterSignalM_ :: MonadDES m => (a -> Event m Bool) -> Signal m a -> Signal m () Source
Filter only those signal values that satisfy the specified predicate, but then ignoring the values.
emptySignal :: MonadDES m => Signal m a Source
An empty signal which is never triggered.
merge3Signals :: MonadDES m => Signal m a -> Signal m a -> Signal m a -> Signal m a Source
Merge three signals.
merge4Signals :: MonadDES m => Signal m a -> Signal m a -> Signal m a -> Signal m a -> Signal m a Source
Merge four signals.
merge5Signals :: MonadDES m => Signal m a -> Signal m a -> Signal m a -> Signal m a -> Signal m a -> Signal m a Source
Merge five signals.
Signal Arriving
arrivalSignal :: MonadDES m => Signal m a -> Signal m (Arrival a) Source
Transform a signal so that the resulting signal returns a sequence of arrivals saving the information about the time points at which the original signal was received.
Delaying Signal
delaySignal :: MonadDES m => Double -> Signal m a -> Signal m a Source
Delay the signal values for the specified time interval.
delaySignalM :: MonadDES m => Event m Double -> Signal m a -> Signal m a Source
Delay the signal values for time intervals recalculated for each value.
Creating Signal in Time Points
newSignalInTimes :: MonadDES m => [Double] -> Event m (Signal m Double) Source
Return a signal that is triggered in the specified time points.
newSignalInIntegTimes :: MonadDES m => Event m (Signal m Double) Source
Return a signal that is triggered in the integration time points.
It should be called with help of runEventInStartTime
.
newSignalInStartTime :: MonadDES m => Event m (Signal m Double) Source
Return a signal that is triggered in the start time.
It should be called with help of runEventInStartTime
.
newSignalInStopTime :: MonadDES m => Event m (Signal m Double) Source
Return a signal that is triggered in the final time.
Signalable Computations
data Signalable m a Source
Describes a computation that also signals when changing its value.
Signalable | |
|
MonadDES m => ResultComputing Signalable m Source | |
Functor m => Functor (Signalable m) Source | |
(MonadDES m, Monoid a) => Monoid (Signalable m a) Source |
signalableChanged :: MonadDES m => Signalable m a -> Signal m a Source
Return a signal notifying that the value has changed.
emptySignalable :: (MonadDES m, Monoid a) => Signalable m a Source
Return an identity.
appendSignalable :: (MonadDES m, Monoid a) => Signalable m a -> Signalable m a -> Signalable m a Source
An associative operation.