module Control.Concurrent.STM.TChan.ReadOnly
( ReadOnlyTChan
, toReadOnlyTChan
) where
import Control.Concurrent.STM.TChan (TChan)
import Control.Concurrent.STM.TChan.Class
data ReadOnlyTChan b = forall a . ReadOnlyTChan (TChan a) (a -> b)
toReadOnlyTChan :: TChan a -> ReadOnlyTChan a
toReadOnlyTChan chan = ReadOnlyTChan chan id
instance TChanDup ReadOnlyTChan where
dupTChan (ReadOnlyTChan chan f) = do
chan' <- dupTChan chan
return (ReadOnlyTChan chan' f)
instance TChanRead ReadOnlyTChan where
readTChan (ReadOnlyTChan chan f) = f <$> readTChan chan
tryReadTChan (ReadOnlyTChan chan f) = fmap f <$> tryReadTChan chan
peekTChan (ReadOnlyTChan chan f) = f <$> peekTChan chan
tryPeekTChan (ReadOnlyTChan chan f) = fmap f <$> tryPeekTChan chan