Patching STM

wren ng thornton wren at
Mon Feb 28 05:47:56 CET 2011

Hello all,

I have a number of functions and data structures I'd like to see added 
to the stm package. The package is listed as being maintained by the 
list, so I thought I'd ask how "sacred" stm is considered before going 
through the process to propose things.

The extra functions are no-brainers. Some are common conveniences (e.g., 
modifyTVar and modifyTVar'), some aim to make the API more consistent 
(e.g., add swapTVar like swapTMVar), and some can be optimized if 
they're included in the package (e.g., tryReadTMVar[1]).

The data structures are all variations on TChan which seem common enough 
to be included in the package, though I could also fork off a stm-data 
package instead. The variations include channels that can be closed, 
channels which have bounded depth (i.e., cause extra writes to block 
until room is available), and channels which are both bounded and closeable.

Thoughts? Also, to make proper patches, where is the stm repo?

[1] From outside the package we must define this as:

     tryReadTMVar :: TMVar a -> STM (Maybe a)
     tryReadTMVar var = do
         m <- tryTakeTMVar var
         case m of
             Nothing -> return ()
             Just x  -> putTMVar var x
         return m

Whereas, from inside the package we can just do:

     tryReadTMVar :: TMVar a -> STM (Maybe a)
     tryReadTMVar (TMVar t) = readTVar t

thus saving an extraneous read and write.

Live well,

More information about the Libraries mailing list