h&}EUnsafe(/1;W Safe-Inferred Trustworthy;atomic-modify-general A version of  that takes an arbitrary pair of functions. This function will allocate more than atomicModifyIORef2, and will tend to take longer to succeed when there is a lot of contention for the . atomicModifyIORef2 ref f = do (old, _new, r) <- atomicModifyIORef2General ref fst f pure (old, r) If the first function (the "extraction function") is a record field selector (e.g., 8), we do our best to make sure the thunk placed in the  is a selector thunk, so the garbage collector can drop the rest of the record once the record is forced. In other cases, callers should generally force the returned new1 value in order to avoid a potential space leak. Conceptually: atomicModifyIORef3General ref extract f = do -- Begin atomic block old <- - ref let r = f old new = extract r  writeIORef# ref new -- End atomic block r  pure (old, new, r) where other threads cannot interfere with the operations in the "atomic block". In particular, no other thread can write to the  between the  and the  writeIORef operations.atomic-modify-general A version of  for  >s. See the documentation there. Indexing is performed safely.atomic-modify-general A version of  for  >s. See the documentation there. Indexing is performed safely.     4atomic-modify-general-0.1.0.0-IuQA8supTnc28kzhmgd1gSData.IORef.AtomicModify.GenericData.IORef.AtomicModify&Data.IORef.AtomicModify.SmallArraySize GHC.IORefatomicModifyIORef2atomicModifyIORef2NativeatomicModifyIORef3GeneralatomicModifyArray3GeneralatomicModifySmallArray3Generalghc-primGHC.PrimgetSizeofSmallMutableArray#baseIORef Data.Tuplesnd readIORefseq(primitive-0.8.0.0-LlRUNeadwzL5iUsmiOkRZ1Data.Primitive.ArrayArrayData.Primitive.SmallArray SmallArray