# Changelog for [`stm` package](http://hackage.haskell.org/package/stm)

## 2.5.2.0 *September 2023*

  * Fix strictness of `stateTVar` ([#30](https://github.com/haskell/stm/ssues/30))
  * Rewrite `TBQueue` to use a more-efficient array-based representation ([#65](https://github.com/haskell/stm/issues/65))
  * `newTBQueue 0` now fails as one would expect ([#28](https://github.com/haskell/stm/issues/28))
  * Add `capacityTBQueue` ([#61](https://github.com/haskell/stm/issues/61))
  * Add `MArray TArray e IO` instance
  * Use unlifted `Array#` for `TArray` ([#66](https://github.com/haskell/stm/pull/66))

## 2.5.1.0 *Aug 2022*

  * Teach `flushTBQueue` to only flush queue when necessary
  * Introduce `Control.Concurrent.STM.TMVar.writeTMVar`
  * Add `Semigroup` and `Monoid` instances for `STM`

## 2.5.0.2 *Dec 2021*

  * Fix non-exhaustive patterns warning (#49)

  * Document particulars of effect-rollback of `Control.Monad.STM.throwSTM` (#32)

## 2.5.0.1 *May 2020*

  * Optimise implementation of `peekTQueue` and `peekTBQueue` to reduce
    probability of transaction conflicts.

## 2.5.0.0 *Sep 2018*

  * Removed `alwaysSucceeds` and `always`, GHC's invariant checking primitives. (GHC #14324)

  * Add `lengthTBQueue` to `Control.Concurrent.STM.TBQueue` (gh-9)

  * Add `stateTVar :: TVar s -> (s -> (a, s)) -> STM a` combinator (gh-14)

  * Switched `newTBQueue` and `newTBQueueIO` to accept `Natural` as size (gh-17)

  * Switched `signalTSemN` and `newTSem` to accept `Natural` and `Integer` respectively (gh-17)

----

#### 2.4.5.1 *Sep 2018*

  * Fix incorrect bookkeeping of write capacity in `flushTBQueue` (gh-9)

  * Avoid redundant `writeTVar`s in `flushTQueue` to avoid unnecessarily
    invalidating other transactions (gh-6)

### 2.4.5.0 *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)


#### 2.4.4.1  *Dec 2015*

  * Add support for `base-4.9.0.0`

  * Drop support for GHC 6.12 / `base-4.2`

### 2.4.4  *Dec 2014*

  * Add support for `base-4.8.0.0`

  * 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`