[Haskell-cafe] TVars & throw
haskell at list.mightyreason.com
Thu Mar 8 04:35:25 EST 2007
Stefan O'Rear wrote:
> On Thu, Mar 08, 2007 at 12:25:15PM +1100, Thomas Conway wrote:
>> Hi All,
>> Consider the following:
>> foo = do
>> v <- newTVar "hi there!"
>> throwDyn v
>> main = do
>> catchDyn (atomically foo) \v -> do
>> x <- atomically (readTVar v)
>> putStr x
>> I.e. throw information that gets rolled back from inside a
>> transaction, catch it and use it.
>> This looks like bad. I assume it actually works, but should it?
> Read the paper!
> it is quite explicitly documented that exceptions can take data out of
> a failing transaction, spj thought it preferable to simply erasing all
> error data.
And one can always use unsafeIOToSTM to exchange data as well, which is what I
used to implement MonadAdvSTM. This lets you queue IO actions to perform if
there is a retry and queue IO actions to perform if there is a commit.
More information about the Haskell-Cafe