{-# LANGUAGE MultiParamTypeClasses #-} -- | -- Module : Simulation.Aivika.Trans.Comp -- Copyright : Copyright (c) 2009-2017, David Sorokin -- License : BSD3 -- Maintainer : David Sorokin -- Stability : experimental -- Tested with: GHC 8.0.1 -- -- It defines a type class of monads based on which the simulation monads can be built. -- module Simulation.Aivika.Trans.Comp (MonadComp(..), MonadCompTrans(..)) where import Control.Monad import Control.Monad.Trans import Simulation.Aivika.Trans.Exception import Simulation.Aivika.Trans.Generator import Simulation.Aivika.Trans.Internal.Types -- | A type class of monads based on which the simulation monads can be built. class (Monad m, MonadException m, MonadGenerator m) => MonadComp m -- | A variant of the standard 'MonadTrans' type class with one difference: -- the computation that will be lifted into another must be 'MonadComp' instead of -- more general and less restricted 'Monad'. class MonadCompTrans t m where -- | Lift the underlying computation into another within simulation. liftComp :: m a -> t m a