module Control.Concurrent.Chan.ReadOnly
( ReadOnlyChan
, toReadOnlyChan
) where
import Control.Concurrent.Chan (Chan)
import Control.Concurrent.Chan.Class
data ReadOnlyChan b = forall a . ReadOnlyChan (Chan a) (a -> b)
instance Functor ReadOnlyChan where
fmap f (ReadOnlyChan c f') = ReadOnlyChan c (f . f')
toReadOnlyChan :: Chan a -> ReadOnlyChan a
toReadOnlyChan c = ReadOnlyChan c id
instance ChanDup ReadOnlyChan where
dupChan (ReadOnlyChan chan f) = do
chan' <- dupChan chan
return (ReadOnlyChan chan' f)
instance ChanRead ReadOnlyChan where
readChan (ReadOnlyChan chan f) = f <$> readChan chan