The other day, I put my AVar package on hackage. Doing so taught me more than i expected it would, mainly that i need to do more testing of cabal packages before submitting them, and also to make sure you've exported all the functions you need to actually use the package (I forgot to put putAVar in the module exports -_-). So i'm up to release 0.0.3, without much work being done at all (although, I can't think of much more to do really).
With the current release, i think that all exceptions that may occur from functions passed by the user to the variable should be caught by and handled correctly by the variable. I guess in a sense, AVars are smart variables that know what is and isn't good for them, and will refuse to hurt themselves (hopefully!).
If you're interested in seeing what AVar can do, check out the Hackage page. I really have no idea how it might be useful, but I'd love to hear others thoughts on it.
If you have any requests, please let me know, and I'll see what I can do (proper transactional ... transactions are not something I want to tackle, especially with uni starting on monday)

One interesting modification would be if instead of returning the error to the caller as the result of the call, you were to re-throw the error at the call-site.
That way the caller doesn't have to come up with a separate way to handle error conditions, but the AVar itself doesn't get trashed.
Thanks for the comment Antoine, and that sounds like a great idea. Maybe I'll make another module that does that (i think the current version is full for this sort of thing.) I will probably move the current one into something like `Data.AVar.Safe` or `Data.AVar.Handlable` (neither are great names :\). Maybe I could name the new one into `Data.AVar.Unsafe`.
Thanks again, really good idea :)
-- Axman