module Network.QUIC.Types.Queue where import UnliftIO.STM import Network.QUIC.Types.Packet newtype RecvQ = RecvQ (TQueue ReceivedPacket) newRecvQ :: IO RecvQ newRecvQ :: IO RecvQ newRecvQ = TQueue ReceivedPacket -> RecvQ RecvQ forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall (m :: * -> *) a. MonadIO m => m (TQueue a) newTQueueIO readRecvQ :: RecvQ -> IO ReceivedPacket readRecvQ :: RecvQ -> IO ReceivedPacket readRecvQ (RecvQ TQueue ReceivedPacket q) = forall (m :: * -> *) a. MonadIO m => STM a -> m a atomically forall a b. (a -> b) -> a -> b $ forall a. TQueue a -> STM a readTQueue TQueue ReceivedPacket q writeRecvQ :: RecvQ -> ReceivedPacket -> IO () writeRecvQ :: RecvQ -> ReceivedPacket -> IO () writeRecvQ (RecvQ TQueue ReceivedPacket q) ReceivedPacket x = forall (m :: * -> *) a. MonadIO m => STM a -> m a atomically forall a b. (a -> b) -> a -> b $ forall a. TQueue a -> a -> STM () writeTQueue TQueue ReceivedPacket q ReceivedPacket x prependRecvQ :: RecvQ -> ReceivedPacket -> STM () prependRecvQ :: RecvQ -> ReceivedPacket -> STM () prependRecvQ (RecvQ TQueue ReceivedPacket q) = forall a. TQueue a -> a -> STM () unGetTQueue TQueue ReceivedPacket q