dupChan, -- :: Chan a -> IO (Chan a)
unGetChan, -- :: Chan a -> a -> IO ()
+ isEmptyChan, -- :: Chan a -> IO Bool
+
{- stream interface -}
getChanContents, -- :: Chan a -> IO [a]
writeList2Chan -- :: Chan a -> [a] -> IO ()
putMVar new_read_end (ChItem val read_end)
putMVar read new_read_end
+isEmptyChan :: Chan a -> IO Bool
+isEmptyChan (Chan read write) = do
+ r <- takeMVar read
+ w <- readMVar write
+ let eq = r == w
+ eq `seq` putMVar read r
+ return eq
+
\end{code}
Operators for interfacing with functional streams.