[Haskell-cafe] Stronger STM primitives needed? Or am I just doing it wrong?

Ryan Ingram ryani.spam at gmail.com
Wed Apr 23 12:13:14 EDT 2008

On Wed, Apr 23, 2008 at 7:54 AM, Tim Harris (RESEARCH)
<tharris at microsoft.com> wrote:
>  What do you think about a slight change:
>    readTVarWhen :: TVar a -> (a -> bool) -> STM a

This seems strictly less powerful than retryUntil:
> readTVarWhen v p = retryUntil v p >> readTVar v

Consider the following transaction:

> intV :: TVar Int
> boolV :: TVar Bool
> interesting = atomically $ do
>    retryUntil intV (> 50)
>    retryUntil boolV id

Lets say that intV contains 100 and boolV contains False.  Then this
transaction retries.  Now, if intV changes to 101, this transaction
doesn't need to re-run; we can see immediately that no predicate
changed.  Using "readTVarWhen", this is less clear; the transaction
log would hold a read on intV which would be more difficult to ignore.

  -- ryan

More information about the Haskell-Cafe mailing list