BSD-3-Clause licensed
Maintained by
This version can be pinned in stack with:stm-,1943

Software Transactional Memory, or STM, is an abstraction for concurrent communication. The main benefits of STM are composability and modularity. That is, using STM you can write concurrent abstractions that can be easily composed with any other abstraction built using STM, without exposing the details of how your abstraction ensures safety. This is typically not the case with other forms of concurrent communication, such as locks or MVars.


Changelog for stm package Feb 2018

  • Fix space leak in TBQueue (gh-2, GHC#14494)

  • Make signalTSem resilient against Int overflows (gh-4)

  • Make definition of readTQueue consistent with readTBQueue (gh-3, GHC#9539)

  • Add flushTQueue to Control.Concurrent.STM.TQueue (gh-1)

  • Add flushTBQueue to Control.Concurrent.STM.TBQueue (gh-1)

  • Add signalTSemN operation (gh-5) Dec 2015

  • Add support for base-

  • Drop support for GHC 6.12 / base-4.2

2.4.4 Dec 2014

  • Add support for base-

  • Tighten Safe Haskell bounds

  • Add mkWeakTMVar to Control.Concurrent.STM.TMVar

  • Add @since-annotations

2.4.3 Mar 2014

  • Update behaviour of newBroadcastTChanIO to match newBroadcastTChan in causing an error on a read from the broadcast channel

  • Add mkWeakTVar

  • Add isFullTBQueue

  • Fix TChan created via newBroadcastTChanIO to throw same exception on a readTChan as when created via newBroadcastTChan

  • Update to Cabal 1.10 format

2.4.2 Nov 2012

  • Add Control.Concurrent.STM.TSem (transactional semaphore)

  • Add Applicative/Alternative instances of STM for GHC <7.0

  • Throw proper exception when readTChan called on a broadcast TChan

2.4 Jul 2012

  • Add Control.Concurrent.STM.TQueue (a faster TChan)

  • Add Control.Concurrent.STM.TBQueue (a bounded channel based on TQueue)

  • Add Eq instance for TChan

  • Add newBroadcastTChan and newBroadcastTChanIO

  • Some performance improvements for TChan

  • Add cloneTChan