toxcore-0.2.11: src/Network/Tox/Timed.hs
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE Safe #-}
{-# LANGUAGE UndecidableInstances #-}
module Network.Tox.Timed where
import Control.Monad (Monad)
import Control.Monad.Random (RandT)
import Control.Monad.Reader (ReaderT)
import Control.Monad.RWS (RWST)
import Control.Monad.State (StateT)
import Control.Monad.Trans (lift)
import Control.Monad.Writer (WriterT)
import Data.Monoid (Monoid)
import Network.Tox.Time (Timestamp)
class Monad m => Timed m where
askTime :: m Timestamp
instance Timed m => Timed (ReaderT r m) where
askTime = lift askTime
instance (Monoid w, Timed m) => Timed (WriterT w m) where
askTime = lift askTime
instance Timed m => Timed (StateT s m) where
askTime = lift askTime
instance (Monoid w, Timed m) => Timed (RWST r w s m) where
askTime = lift askTime
instance Timed m => Timed (RandT s m) where
askTime = lift askTime