{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE StrictData #-} module Tox.Network.Core.TimedT where import Control.Monad.IO.Class (MonadIO) import Control.Monad.Reader (ReaderT, ask, runReaderT) import Control.Monad.State (MonadState) import Control.Monad.Trans (MonadTrans) import Control.Monad.Writer (MonadWriter) import Tox.Core.Time (Timestamp) import Tox.Core.Timed (Timed (..)) import Tox.Crypto.Core.Keyed (Keyed) import Tox.Crypto.Core.MonadRandomBytes (MonadRandomBytes) import Tox.Network.Core.Networked (Networked) newtype TimedT m a = TimedT (ReaderT Timestamp m a) deriving (Applicative (TimedT m) a -> TimedT m a Applicative (TimedT m) -> (forall a b. TimedT m a -> (a -> TimedT m b) -> TimedT m b) -> (forall a b. TimedT m a -> TimedT m b -> TimedT m b) -> (forall a. a -> TimedT m a) -> Monad (TimedT m) TimedT m a -> (a -> TimedT m b) -> TimedT m b TimedT m a -> TimedT m b -> TimedT m b forall a. a -> TimedT m a forall a b. TimedT m a -> TimedT m b -> TimedT m b forall a b. TimedT m a -> (a -> TimedT m b) -> TimedT m b forall (m :: * -> *). Monad m => Applicative (TimedT m) forall (m :: * -> *) a. Monad m => a -> TimedT m a forall (m :: * -> *) a b. Monad m => TimedT m a -> TimedT m b -> TimedT m b forall (m :: * -> *) a b. Monad m => TimedT m a -> (a -> TimedT m b) -> TimedT m b forall (m :: * -> *). Applicative m -> (forall a b. m a -> (a -> m b) -> m b) -> (forall a b. m a -> m b -> m b) -> (forall a. a -> m a) -> Monad m return :: a -> TimedT m a $creturn :: forall (m :: * -> *) a. Monad m => a -> TimedT m a >> :: TimedT m a -> TimedT m b -> TimedT m b $c>> :: forall (m :: * -> *) a b. Monad m => TimedT m a -> TimedT m b -> TimedT m b >>= :: TimedT m a -> (a -> TimedT m b) -> TimedT m b $c>>= :: forall (m :: * -> *) a b. Monad m => TimedT m a -> (a -> TimedT m b) -> TimedT m b $cp1Monad :: forall (m :: * -> *). Monad m => Applicative (TimedT m) Monad, Functor (TimedT m) a -> TimedT m a Functor (TimedT m) -> (forall a. a -> TimedT m a) -> (forall a b. TimedT m (a -> b) -> TimedT m a -> TimedT m b) -> (forall a b c. (a -> b -> c) -> TimedT m a -> TimedT m b -> TimedT m c) -> (forall a b. TimedT m a -> TimedT m b -> TimedT m b) -> (forall a b. TimedT m a -> TimedT m b -> TimedT m a) -> Applicative (TimedT m) TimedT m a -> TimedT m b -> TimedT m b TimedT m a -> TimedT m b -> TimedT m a TimedT m (a -> b) -> TimedT m a -> TimedT m b (a -> b -> c) -> TimedT m a -> TimedT m b -> TimedT m c forall a. a -> TimedT m a forall a b. TimedT m a -> TimedT m b -> TimedT m a forall a b. TimedT m a -> TimedT m b -> TimedT m b forall a b. TimedT m (a -> b) -> TimedT m a -> TimedT m b forall a b c. (a -> b -> c) -> TimedT m a -> TimedT m b -> TimedT m c forall (f :: * -> *). Functor f -> (forall a. a -> f a) -> (forall a b. f (a -> b) -> f a -> f b) -> (forall a b c. (a -> b -> c) -> f a -> f b -> f c) -> (forall a b. f a -> f b -> f b) -> (forall a b. f a -> f b -> f a) -> Applicative f forall (m :: * -> *). Applicative m => Functor (TimedT m) forall (m :: * -> *) a. Applicative m => a -> TimedT m a forall (m :: * -> *) a b. Applicative m => TimedT m a -> TimedT m b -> TimedT m a forall (m :: * -> *) a b. Applicative m => TimedT m a -> TimedT m b -> TimedT m b forall (m :: * -> *) a b. Applicative m => TimedT m (a -> b) -> TimedT m a -> TimedT m b forall (m :: * -> *) a b c. Applicative m => (a -> b -> c) -> TimedT m a -> TimedT m b -> TimedT m c <* :: TimedT m a -> TimedT m b -> TimedT m a $c<* :: forall (m :: * -> *) a b. Applicative m => TimedT m a -> TimedT m b -> TimedT m a *> :: TimedT m a -> TimedT m b -> TimedT m b $c*> :: forall (m :: * -> *) a b. Applicative m => TimedT m a -> TimedT m b -> TimedT m b liftA2 :: (a -> b -> c) -> TimedT m a -> TimedT m b -> TimedT m c $cliftA2 :: forall (m :: * -> *) a b c. Applicative m => (a -> b -> c) -> TimedT m a -> TimedT m b -> TimedT m c <*> :: TimedT m (a -> b) -> TimedT m a -> TimedT m b $c<*> :: forall (m :: * -> *) a b. Applicative m => TimedT m (a -> b) -> TimedT m a -> TimedT m b pure :: a -> TimedT m a $cpure :: forall (m :: * -> *) a. Applicative m => a -> TimedT m a $cp1Applicative :: forall (m :: * -> *). Applicative m => Functor (TimedT m) Applicative, a -> TimedT m b -> TimedT m a (a -> b) -> TimedT m a -> TimedT m b (forall a b. (a -> b) -> TimedT m a -> TimedT m b) -> (forall a b. a -> TimedT m b -> TimedT m a) -> Functor (TimedT m) forall a b. a -> TimedT m b -> TimedT m a forall a b. (a -> b) -> TimedT m a -> TimedT m b forall (m :: * -> *) a b. Functor m => a -> TimedT m b -> TimedT m a forall (m :: * -> *) a b. Functor m => (a -> b) -> TimedT m a -> TimedT m b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f <$ :: a -> TimedT m b -> TimedT m a $c<$ :: forall (m :: * -> *) a b. Functor m => a -> TimedT m b -> TimedT m a fmap :: (a -> b) -> TimedT m a -> TimedT m b $cfmap :: forall (m :: * -> *) a b. Functor m => (a -> b) -> TimedT m a -> TimedT m b Functor, MonadState s, MonadWriter w , Monad (TimedT m) Applicative (TimedT m) TimedT m KeyPair Monad (TimedT m) -> Applicative (TimedT m) -> (Int -> TimedT m ByteString) -> TimedT m KeyPair -> MonadRandomBytes (TimedT m) Int -> TimedT m ByteString forall (m :: * -> *). Monad m -> Applicative m -> (Int -> m ByteString) -> m KeyPair -> MonadRandomBytes m forall (m :: * -> *). MonadRandomBytes m => Monad (TimedT m) forall (m :: * -> *). MonadRandomBytes m => Applicative (TimedT m) forall (m :: * -> *). MonadRandomBytes m => TimedT m KeyPair forall (m :: * -> *). MonadRandomBytes m => Int -> TimedT m ByteString newKeyPair :: TimedT m KeyPair $cnewKeyPair :: forall (m :: * -> *). MonadRandomBytes m => TimedT m KeyPair randomBytes :: Int -> TimedT m ByteString $crandomBytes :: forall (m :: * -> *). MonadRandomBytes m => Int -> TimedT m ByteString $cp2MonadRandomBytes :: forall (m :: * -> *). MonadRandomBytes m => Applicative (TimedT m) $cp1MonadRandomBytes :: forall (m :: * -> *). MonadRandomBytes m => Monad (TimedT m) MonadRandomBytes, m a -> TimedT m a (forall (m :: * -> *) a. Monad m => m a -> TimedT m a) -> MonadTrans TimedT forall (m :: * -> *) a. Monad m => m a -> TimedT m a forall (t :: (* -> *) -> * -> *). (forall (m :: * -> *) a. Monad m => m a -> t m a) -> MonadTrans t lift :: m a -> TimedT m a $clift :: forall (m :: * -> *) a. Monad m => m a -> TimedT m a MonadTrans, Monad (TimedT m) Monad (TimedT m) -> (forall a. IO a -> TimedT m a) -> MonadIO (TimedT m) IO a -> TimedT m a forall a. IO a -> TimedT m a forall (m :: * -> *). Monad m -> (forall a. IO a -> m a) -> MonadIO m forall (m :: * -> *). MonadIO m => Monad (TimedT m) forall (m :: * -> *) a. MonadIO m => IO a -> TimedT m a liftIO :: IO a -> TimedT m a $cliftIO :: forall (m :: * -> *) a. MonadIO m => IO a -> TimedT m a $cp1MonadIO :: forall (m :: * -> *). MonadIO m => Monad (TimedT m) MonadIO, Monad (TimedT m) Monad (TimedT m) -> (forall payload. (Binary payload, Show payload) => NodeInfo -> Packet payload -> TimedT m ()) -> Networked (TimedT m) NodeInfo -> Packet payload -> TimedT m () forall payload. (Binary payload, Show payload) => NodeInfo -> Packet payload -> TimedT m () forall (m :: * -> *). Monad m -> (forall payload. (Binary payload, Show payload) => NodeInfo -> Packet payload -> m ()) -> Networked m forall (m :: * -> *). Networked m => Monad (TimedT m) forall (m :: * -> *) payload. (Networked m, Binary payload, Show payload) => NodeInfo -> Packet payload -> TimedT m () sendPacket :: NodeInfo -> Packet payload -> TimedT m () $csendPacket :: forall (m :: * -> *) payload. (Networked m, Binary payload, Show payload) => NodeInfo -> Packet payload -> TimedT m () $cp1Networked :: forall (m :: * -> *). Networked m => Monad (TimedT m) Networked, Monad (TimedT m) Applicative (TimedT m) Monad (TimedT m) -> Applicative (TimedT m) -> (SecretKey -> PublicKey -> TimedT m CombinedKey) -> Keyed (TimedT m) SecretKey -> PublicKey -> TimedT m CombinedKey forall (m :: * -> *). Monad m -> Applicative m -> (SecretKey -> PublicKey -> m CombinedKey) -> Keyed m forall (m :: * -> *). Keyed m => Monad (TimedT m) forall (m :: * -> *). Keyed m => Applicative (TimedT m) forall (m :: * -> *). Keyed m => SecretKey -> PublicKey -> TimedT m CombinedKey getCombinedKey :: SecretKey -> PublicKey -> TimedT m CombinedKey $cgetCombinedKey :: forall (m :: * -> *). Keyed m => SecretKey -> PublicKey -> TimedT m CombinedKey $cp2Keyed :: forall (m :: * -> *). Keyed m => Applicative (TimedT m) $cp1Keyed :: forall (m :: * -> *). Keyed m => Monad (TimedT m) Keyed) runTimedT :: TimedT m a -> Timestamp -> m a runTimedT :: TimedT m a -> Timestamp -> m a runTimedT (TimedT ReaderT Timestamp m a m) = ReaderT Timestamp m a -> Timestamp -> m a forall r (m :: * -> *) a. ReaderT r m a -> r -> m a runReaderT ReaderT Timestamp m a m instance Monad m => Timed (TimedT m) where askTime :: TimedT m Timestamp askTime = ReaderT Timestamp m Timestamp -> TimedT m Timestamp forall (m :: * -> *) a. ReaderT Timestamp m a -> TimedT m a TimedT ReaderT Timestamp m Timestamp forall r (m :: * -> *). MonadReader r m => m r ask