Safe Haskell | None |
---|---|
Language | Haskell2010 |
Lamport clock network simulation.
ReplicaSimT
provides Replica
and Clock
instances,
replicas may interchange data while they are connected in a NetworkSimT
.
Synopsis
- type NetworkSim = NetworkSimT Identity
- data NetworkSimT m a
- type ReplicaSim = ReplicaSimT Identity
- data ReplicaSimT m a
- runNetworkSim :: NetworkSim a -> a
- runNetworkSimT :: Monad m => NetworkSimT m a -> m a
- runReplicaSim :: ReplicaId -> ReplicaSim a -> NetworkSim a
- runReplicaSimT :: ReplicaId -> ReplicaSimT m a -> NetworkSimT m a
Documentation
type NetworkSim = NetworkSimT Identity Source #
data NetworkSimT m a Source #
Lamport clock simulation. Key is ReplicaId
.
Non-present value is equivalent to (0, initial).
Instances
MonadTrans NetworkSimT Source # | |
Defined in RON.Event.Simulation lift :: Monad m => m a -> NetworkSimT m a # | |
Monad m => Monad (NetworkSimT m) Source # | |
Defined in RON.Event.Simulation (>>=) :: NetworkSimT m a -> (a -> NetworkSimT m b) -> NetworkSimT m b # (>>) :: NetworkSimT m a -> NetworkSimT m b -> NetworkSimT m b # return :: a -> NetworkSimT m a # fail :: String -> NetworkSimT m a # | |
Functor m => Functor (NetworkSimT m) Source # | |
Defined in RON.Event.Simulation fmap :: (a -> b) -> NetworkSimT m a -> NetworkSimT m b # (<$) :: a -> NetworkSimT m b -> NetworkSimT m a # | |
Monad m => Applicative (NetworkSimT m) Source # | |
Defined in RON.Event.Simulation pure :: a -> NetworkSimT m a # (<*>) :: NetworkSimT m (a -> b) -> NetworkSimT m a -> NetworkSimT m b # liftA2 :: (a -> b -> c) -> NetworkSimT m a -> NetworkSimT m b -> NetworkSimT m c # (*>) :: NetworkSimT m a -> NetworkSimT m b -> NetworkSimT m b # (<*) :: NetworkSimT m a -> NetworkSimT m b -> NetworkSimT m a # |
type ReplicaSim = ReplicaSimT Identity Source #
data ReplicaSimT m a Source #
ReplicaSim inside Lamport clock simulation.
Instances
runNetworkSim :: NetworkSim a -> a Source #
Execute network simulation
Usage:
runNetworkSim $ dorunReplicaSim
r1 $ do actions...runReplicaSim
r2 $ do actions...runReplicaSim
r1 $ ...
Each runNetworkSim
starts its own networks.
One shouldn't use in one network events generated in another.
runNetworkSimT :: Monad m => NetworkSimT m a -> m a Source #
runReplicaSim :: ReplicaId -> ReplicaSim a -> NetworkSim a Source #
runReplicaSimT :: ReplicaId -> ReplicaSimT m a -> NetworkSimT m a Source #