module Simulation.Aivika.Distributed.Optimistic.DIO
       (DIO,
        DIOParams(..),
        DIOEnv(..),
        DIOStrategy(..),
        runDIO,
        runDIOWithEnv,
        defaultDIOParams,
        defaultDIOEnv,
        dioParams,
        messageInboxId,
        timeServerId,
        logDIO,
        terminateDIO,
        registerDIO,
        unregisterDIO,
        monitorProcessDIO,
        InboxProcessMessage(MonitorProcessMessage),
        processMonitorSignal) where
import Control.Monad
import Control.Monad.Trans
import Simulation.Aivika.Trans.Comp
import Simulation.Aivika.Trans.DES
import Simulation.Aivika.Trans.Exception
import Simulation.Aivika.Trans.Generator
import Simulation.Aivika.Trans.Event
import Simulation.Aivika.Trans.Composite
import Simulation.Aivika.Trans.Process
import Simulation.Aivika.Trans.Ref.Base
import Simulation.Aivika.Trans.QueueStrategy
import Simulation.Aivika.Trans.Internal.Types
import Simulation.Aivika.Distributed.Optimistic.Internal.Message
import Simulation.Aivika.Distributed.Optimistic.Internal.DIO
import Simulation.Aivika.Distributed.Optimistic.Internal.Event
import  Simulation.Aivika.Distributed.Optimistic.Internal.InputMessageQueue
import  Simulation.Aivika.Distributed.Optimistic.Internal.OutputMessageQueue
import Simulation.Aivika.Distributed.Optimistic.Generator
import Simulation.Aivika.Distributed.Optimistic.Ref.Base.Lazy
import Simulation.Aivika.Distributed.Optimistic.Ref.Base.Strict
import Simulation.Aivika.Distributed.Optimistic.QueueStrategy
instance MonadDES DIO
instance MonadComp DIO
instance  MonadIO (Process DIO) where
  liftIO = liftEvent . liftIO
instance  MonadIO (Composite DIO) where
  liftIO = liftEvent . liftIO