Blame Control/Concurrent/Chan/Lifted.hs

Packit 1d883e
{-# LANGUAGE CPP #-}
Packit 1d883e
{-# LANGUAGE NoImplicitPrelude #-}
Packit 1d883e
{-# LANGUAGE FlexibleContexts #-}
Packit 1d883e
Packit 1d883e
#if __GLASGOW_HASKELL__ >= 702
Packit 1d883e
{-# LANGUAGE Safe #-}
Packit 1d883e
#endif
Packit 1d883e
Packit 1d883e
{- |
Packit 1d883e
Module      :  Control.Concurrent.Chan.Lifted
Packit 1d883e
Copyright   :  Liyang HU, Bas van Dijk
Packit 1d883e
License     :  BSD-style
Packit 1d883e
Packit 1d883e
Maintainer  :  Bas van Dijk <v.dijk.bas@gmail.com>
Packit 1d883e
Stability   :  experimental
Packit 1d883e
Packit 1d883e
This is a wrapped version of "Control.Concurrent.Chan" with types
Packit 1d883e
generalised from 'IO' to all monads in 'MonadBase'.
Packit 1d883e
Packit 1d883e
'Chan.unGetChan' and 'Chan.isEmptyChan' are deprecated in @base@, therefore
Packit 1d883e
they are not included here. Use 'Control.Concurrent.STM.TVar' instead.
Packit 1d883e
-}
Packit 1d883e
Packit 1d883e
module Control.Concurrent.Chan.Lifted
Packit 1d883e
    ( Chan
Packit 1d883e
    , newChan
Packit 1d883e
    , writeChan
Packit 1d883e
    , readChan
Packit 1d883e
    , dupChan
Packit 1d883e
    , getChanContents
Packit 1d883e
    , writeList2Chan
Packit 1d883e
    ) where
Packit 1d883e
Packit 1d883e
--------------------------------------------------------------------------------
Packit 1d883e
-- Imports
Packit 1d883e
--------------------------------------------------------------------------------
Packit 1d883e
Packit 1d883e
-- from base:
Packit 1d883e
import Control.Concurrent.Chan ( Chan )
Packit 1d883e
import qualified Control.Concurrent.Chan as Chan
Packit 1d883e
import System.IO ( IO )
Packit 1d883e
import Prelude ( (.) )
Packit 1d883e
Packit 1d883e
-- from transformers-base:
Packit 1d883e
import Control.Monad.Base ( MonadBase, liftBase )
Packit 1d883e
Packit 1d883e
#include "inlinable.h"
Packit 1d883e
Packit 1d883e
--------------------------------------------------------------------------------
Packit 1d883e
-- * Chans
Packit 1d883e
--------------------------------------------------------------------------------
Packit 1d883e
Packit 1d883e
-- | Generalized version of 'Chan.newChan'.
Packit 1d883e
newChan :: MonadBase IO m => m (Chan a)
Packit 1d883e
newChan = liftBase Chan.newChan
Packit 1d883e
{-# INLINABLE newChan #-}
Packit 1d883e
Packit 1d883e
-- | Generalized version of 'Chan.writeChan'.
Packit 1d883e
writeChan :: MonadBase IO m => Chan a -> a -> m ()
Packit 1d883e
writeChan chan = liftBase . Chan.writeChan chan
Packit 1d883e
{-# INLINABLE writeChan #-}
Packit 1d883e
Packit 1d883e
-- | Generalized version of 'Chan.readChan'.
Packit 1d883e
readChan :: MonadBase IO m => Chan a -> m a
Packit 1d883e
readChan = liftBase . Chan.readChan
Packit 1d883e
{-# INLINABLE readChan #-}
Packit 1d883e
Packit 1d883e
-- | Generalized version of 'Chan.dupChan'.
Packit 1d883e
dupChan :: MonadBase IO m => Chan a -> m (Chan a)
Packit 1d883e
dupChan = liftBase . Chan.dupChan
Packit 1d883e
{-# INLINABLE dupChan #-}
Packit 1d883e
Packit 1d883e
-- | Generalized version of 'Chan.getChanContents'.
Packit 1d883e
getChanContents :: MonadBase IO m => Chan a -> m [a]
Packit 1d883e
getChanContents = liftBase . Chan.getChanContents
Packit 1d883e
{-# INLINABLE getChanContents #-}
Packit 1d883e
Packit 1d883e
-- | Generalized version of 'Chan.writeList2Chan'.
Packit 1d883e
writeList2Chan :: MonadBase IO m => Chan a -> [a] -> m ()
Packit 1d883e
writeList2Chan chan = liftBase . Chan.writeList2Chan chan
Packit 1d883e
{-# INLINABLE writeList2Chan #-}