
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, ~wren