úÎJKpresumably portable experimental Luke Palmer <lrpalmer@gmail.com>:Reader is a functor (also monad) for reading IVars. This < provides composability when blocking on the first of a set : of IVars, as you can block on several IVars of different  types. >The MonadPlus and Monoid instances for Reader are equivalent. < It tries the left action ; if it blocks, then it tries the  right action ; if it& blocks, then the whole action blocks $ until one of the two is available.  A write-once variable. Create a new empty IVar. =Write a value to an IVar. If the IVar already has a value,  throws an error "!Attempt to write to an IVar twice". Read an IVar into the  functor. Pass this to   or  to extract the value. #Run a reader nonblocking. Returns Just x if a value x is  available, Nothing otherwise. 7Block on a reader. Returns the value as soon as it is  available. ,Combination nonblocking and blocking read. combo r  Returns Left x+ if the value is available now, otherwise  returns Right (blocking r). This is more efficient than ? using nonblocking and blocking in sequence (it only evaluates  the Reader once).       data-ivar-0.20 Data.IVarReaderIVarnewwriteread nonblockingblockingcombo runReaderLogEntryStateNoValueValue addAction deleteAction primBlocking