Let me answer this myself - brain burnt... Of course it is OK, that is precisely the semantics of MVars - the are empty or full, thus assuring the mutual exclusion between threads.
Been a hard week..... Neil ... so the deeper question - why don't you realise these mistakes till five minutes *after* you've pressed the send button.... Neil Davies wrote: > Hi, I was looking over the libraries for bits of GHC (no doubt a standard > form of > relaxation for readers of this list), and noticed the following statement > (in Data.Unique): > > -- | Creates a new object of type 'Unique'. The value returned will > -- not compare equal to any other value of type 'Unique' returned by > -- previous calls to 'newUnique'. > > This set me thinking - so I looked at the code > > newUnique :: IO Unique > newUnique = do > val <- takeMVar uniqSource > let next = val+1 > putMVar uniqSource next > return (Unique next) > > In the concurrent execution world in which we live - I don't think that the > implementation > supports the "uniqueness" statement above - or am I not understanding > something? > > Cheers > > Neil > > > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe