    -- | Lifted "Control.Concurrent.Chan".
    --
    -- @since 0.1.0.0
    module UnliftIO.Chan
      ( Chan
      , newChan
      , writeChan
      , readChan
      , dupChan
      , getChanContents
      , writeList2Chan
      ) where

    import Control.Monad.IO.Unlift
    import Control.Concurrent.Chan (Chan)
    import qualified Control.Concurrent.Chan as C

    -- | Lifted 'C.newChan'.
    --
    -- @since 0.1.0.0
    newChan :: MonadIO m => m (Chan a)
    newChan = liftIO C.newChan

    -- | Lifted 'C.writeChan'.
    --
    -- @since 0.1.0.0
    writeChan :: MonadIO m => Chan a -> a -> m ()
    writeChan c = liftIO . C.writeChan c

    -- | Lifted 'C.readChan'.
    --
    -- @since 0.1.0.0
    readChan :: MonadIO m => Chan a -> m a
    readChan = liftIO . C.readChan

    -- | Lifted 'C.dupChan'.
    --
    -- @since 0.1.0.0
    dupChan :: MonadIO m => Chan a -> m (Chan a)
    dupChan = liftIO . C.dupChan

    -- | Lifted 'C.getChanContents'.
    --
    -- @since 0.1.0.0
    getChanContents :: MonadIO m => Chan a -> m [a]
    getChanContents = liftIO . C.getChanContents

    -- | Lifted 'C.writeList2Chan'.
    --
    -- @since 0.1.0.0
    writeList2Chan :: MonadIO m => Chan a -> [a] -> m ()
    writeList2Chan c = liftIO . C.writeList2Chan c