- data SimControl m
- data AdHocEvent m = AdHocEvent (m Doc) (m ())
- (?:) :: (Monad m, Pretty desc) => desc -> m a -> AdHocEvent m
- (?::) :: Monad m => m Doc -> m a -> AdHocEvent m
- (&) :: (MonadEvent m e1, MonadEvent m e2) => e1 -> e2 -> AdHocEvent m
- (&-) :: (ScheduleEvent m t e2, MonadEvent m e1, Typeable1 m) => e1 -> e2 -> AdHocEvent m
- (@:) :: (ScheduleEvent m t e, Pretty t, Num t) => e -> t -> AdHocEvent m

# Documentation

data SimControl m Source

(MonadSimControl m, Typeable1 m) => MonadEvent m (SimControl m) | |

Eq (SimControl m) | |

Show (SimControl m) | |

Typeable1 m => Typeable (SimControl m) | |

Pretty (SimControl m) |

data AdHocEvent m Source

An event with description and effect supplied at run time

AdHocEvent (m Doc) (m ()) |

(Monad m, Typeable1 m) => MonadEvent m (AdHocEvent m) | |

Typeable1 m => Typeable (AdHocEvent m) |

(?:) :: (Monad m, Pretty desc) => desc -> m a -> AdHocEvent mSource

An infix operator to construct an event from a description and an action

(?::) :: Monad m => m Doc -> m a -> AdHocEvent mSource

Same thing, but use an action to generate the description

(&) :: (MonadEvent m e1, MonadEvent m e2) => e1 -> e2 -> AdHocEvent mSource

An infix operator for sequential composition of events

(&-) :: (ScheduleEvent m t e2, MonadEvent m e1, Typeable1 m) => e1 -> e2 -> AdHocEvent mSource

A version of `&`

that preserves distinctness of events
at the expense of being able to guarantee "proper" interleaving
with other events scheduled at the same time. For example, suppose a
composite event e1 &- e2 of this type is scheduled, then a third
event e3 is scheduled for the same time. The "expected" order of
execution is e1; e2; e3. What actually happens is e1; e3; e2 -
because (e1 &- e2) runs, having the effect of running e1 and
scheduling e2, then e3 runs (because it's next in the queue),
then e2 finally runs. This situation could be solved by changing
the semantics for `doNext`

as proposed there.

This is primarily useful for separating an initial `SetDebugHandlers`

event from the other event(s) being fired at the start
of the simulation, so that they will be "seen" by the
newly installed handlers.

(@:) :: (ScheduleEvent m t e, Pretty t, Num t) => e -> t -> AdHocEvent mSource

An infix operator for defining a "delayed" event - or rather a new event that schedules its payload at a later time