[Haskell-cafe] STM rollback?
Alexander Vershilov
alexander.vershilov at gmail.com
Sat Nov 28 21:14:03 UTC 2020
As far as I understand you can call throwSTM and get desired effect.
—
Alexander Vershilov
> 29 нояб. 2020 г., в 00:07, amindfv--- via Haskell-Cafe <haskell-cafe at haskell.org> написал(а):
>
> I'd like to be able to give up on an STM transaction: roll back and don't retry.
> I've cooked up something with exceptions but it feels a bit icky to use exceptions for something like this - is there a better way?:
>
> data Rollback = Rollback deriving (Show)
> instance Exception Rollback
>
> rollback :: STM x
> rollback = throwSTM Rollback
>
> atomicallyWithRollback :: STM x -> IO (Maybe x)
> atomicallyWithRollback a =
> (Just <$> atomically a)
> `catch` (\Rollback -> pure Nothing)
>
> The alternative I've found is something like:
>
> otherWay :: STM x -> IO (Maybe x)
> otherWay a =
> atomically $ (Just <$> a) `orElse` pure Nothing
>
> But this turns any "retry" in "a" into a rollback, and I'd like to have the option to do either (retry or rollback).
>
> Thanks,
> Tom
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20201129/798f15ed/attachment.html>
More information about the Haskell-Cafe
mailing list