Hi, I'm getting strange behavior when using the 'many' combinator to read zero or more items off of a TQueue with readTQueue. The script that exhibits this behavior is as follows: import Control.Concurrent.STM import Control.Concurrent import Control.Monad import Control.Applicative main = do q <- newTQueueIO atomically $ writeTQueue q True atomically $ writeTQueue q False forever $ do xs <- atomically $ many $ readTQueue q print xs threadDelay 500000 I'd expect the output of the script to be: [True,False] [] [] ... However, that is not the case: the actual output of the script is: [True,False] [True,False] [True,False] ... This means that TQueue is incompatible with TChan, since if TQueue is replaced by TChan then the script behaves as one would expect. If 1 element (say, True) is written into the TQueue instead of 2, then the output of the script is: [True] [] [] ... Which is expected behavior, but inconsistent with the behavior when the TQueue has 2 or more elements in it. Is this considered a bug, or undocumented behavior of TQueue?