module Network.QUIC.Imports (
    Bytes
  , ByteString(..)
  , ShortByteString(..)
  , Builder
  , module Control.Applicative
  , module Control.Monad
  , module Data.Bits
  , module Data.Foldable
  , module Data.IORef
  , module Data.Int
  , module Data.Monoid
  , module Data.Ord
  , module Data.Word
  , module Data.Array
  , module Data.Array.IO
  , module Data.Maybe
  , module Numeric
  , module Network.ByteOrder
  , module Network.QUIC.Utils
  , (.<<.), (.>>.)
  , atomicModifyIORef''
  ) where

import Control.Applicative
import Control.Monad
import Data.Array
import Data.Array.IO
import Data.Bits
import Data.ByteString.Builder (Builder)
import Data.ByteString.Internal (ByteString(..))
import Data.ByteString.Short.Internal (ShortByteString(..))
import Data.Foldable
import Data.IORef
import Data.Int
import Data.Maybe
import Data.Monoid
import Data.Ord
import Data.Word
import Network.ByteOrder
import Network.QUIC.Utils
import Numeric

-- | All internal byte sequences.
--   `ByteString` should be used for FFI related stuff.
type Bytes = ShortByteString

infixl 8 .<<.
(.<<.) :: Bits a => a -> Int -> a
.<<. :: a -> Int -> a
(.<<.) = a -> Int -> a
forall a. Bits a => a -> Int -> a
unsafeShiftL

infixl 8 .>>.
(.>>.) :: Bits a => a -> Int -> a
.>>. :: a -> Int -> a
(.>>.) = a -> Int -> a
forall a. Bits a => a -> Int -> a
unsafeShiftR

atomicModifyIORef'' :: IORef a -> (a -> a) -> IO ()
atomicModifyIORef'' :: IORef a -> (a -> a) -> IO ()
atomicModifyIORef'' IORef a
ref a -> a
f = IORef a -> (a -> (a, ())) -> IO ()
forall a b. IORef a -> (a -> (a, b)) -> IO b
atomicModifyIORef' IORef a
ref ((a -> (a, ())) -> IO ()) -> (a -> (a, ())) -> IO ()
forall a b. (a -> b) -> a -> b
$ \a
x -> (a -> a
f a
x, ())