[project @ 1999-01-25 10:26:18 by sof]
authorsof <unknown>
Mon, 25 Jan 1999 10:26:18 +0000 (10:26 +0000)
committersof <unknown>
Mon, 25 Jan 1999 10:26:18 +0000 (10:26 +0000)
Added isEmptyChan

ghc/lib/concurrent/Channel.lhs

index f9293c5..fca29df 100644 (file)
@@ -20,6 +20,8 @@ module Channel
        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 ()
@@ -96,6 +98,14 @@ unGetChan (Chan read write) val = do
    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.