@@ -7,7 +7,6 @@ import Control.Monad (when)
77import Control.Applicative (ZipList(..))
88import Control.Concurrent (MVar, takeMVar, putMVar, newEmptyMVar)
99import Control.Monad (replicateM, replicateM_)
10−import Control.Monad.IO.Class (liftIO)
1110import Data.List (sort, foldl', scanl')
1211import GHC.Word (Word8)
1312
@@ -121,7 +120,7 @@ sourceUnfoldrM mv n = A.unfoldrM step 0
121120 if cnt > fromIntegral n
122121 then return Nothing
123122 else do
124− liftIO $ dbgMVar ("put sourceUnfoldrM " ++ msg) (putMVar mv ())
123+ dbgMVar ("put sourceUnfoldrM " ++ msg) (putMVar mv ())
125124 return (Just (fromIntegral cnt, cnt + 1))
126125
127126concurrentUnfoldrM
@@ -142,15 +141,16 @@ concurrentUnfoldrM eq op n =
142141 A.toList $ do
143142 x <- op (sourceUnfoldrM mv n)
144143 let msg = show x ++ "/" ++ show n
145− if even x
146− then do
147− liftIO $ dbgMVar ("first take concurrentUnfoldrM " ++ msg)
148− (takeMVar mv)
149− if n > x
150− then liftIO $ dbgMVar ("second take concurrentUnfoldrM " ++ msg)
144+ A.once $ do
145+ if even x
146+ then do
147+ dbgMVar ("first take concurrentUnfoldrM " ++ msg)
151148 (takeMVar mv)
149+ if n > x
150+ then dbgMVar ("second take concurrentUnfoldrM " ++ msg)
151+ (takeMVar mv)
152+ else return ()
152153 else return ()
153− else return ()
154154 return x
155155 equals eq stream list
156156