On Mon, Mar 27, 2006 at 09:36:28AM +0100, Simon Marlow wrote: > On 26 March 2006 03:44, Ross Paterson wrote: > > [...] the key point is that > > a Haskell' module that does not use concurrency, but is thread-safe, > > ought to work with non-concurrent implementations too. > > > > To make that work, we'd need two interfaces: > > * one for applications that make use of concurrency. This would be > > unavailable on some implementations. > > * one for thread-safe use of state. This would be available on all > > implementations, and authors not requiring concurrency would be > > encouraged to use it for maximum portability. > > Sure, I think this is a point on which we're all agreed. > > The portable interface could be Control.Concurrent.MVar, perhaps.
As Malcolm pointed out, using MVars requires some care, even if you were just aiming to be thread-safe. Packaged things like atomicModifyIORef are safe, but awkward, and need extra stuff to handle multiple variables. How about STM (minus retry/orElse) and TVars as the portable interface? They're trivial for a single-threaded implementation, and provide a comfortable interface for everyone. _______________________________________________ Haskell-prime mailing list Haskell-prime@haskell.org http://haskell.org/mailman/listinfo/haskell-prime