
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

Not very sacred. Go ahead and propose. http://darcs.haskell.org/packages/stm S | -----Original Message----- | From: libraries-bounces@haskell.org [mailto:libraries-bounces@haskell.org] On | Behalf Of wren ng thornton | Sent: 28 February 2011 04:48 | To: libraries@haskell.org | Subject: Patching STM | | 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 | | _______________________________________________ | Libraries mailing list | Libraries@haskell.org | http://www.haskell.org/mailman/listinfo/libraries
participants (2)
-
Simon Peyton-Jones
-
wren ng thornton