úÎ;œ8•1      !"#$%&'()*+,-./0None5Create a new counter initialized to the given value. NTry repeatedly until we successfully increment the counter by a given amount. < Returns the original value of the counter (pre-increment). Just like the  Data.Atomics/ CAS interface, this routine returns an opaque , ticket that can be used in CAS operations. NOpaque tickets cannot be constructed, but they can be destructed into values. Equivalent to  followed by . <Make a non-atomic write to the counter. No memory-barrier. &Compare and swap for the counter ADT.     None 5Create a new counter initialized to the given value. )Increment the counter by a given amount. 4 Returns the original value before the increment. LNote that UNLIKE with boxed implementations of counters, where increment is # based on CAS, this increment is O(1)*. Fetch-and-add does not require a retry  loop like CAS. Just like the  Data.Atomics/ CAS interface, this routine returns an opaque , ticket that can be used in CAS operations. NOpaque tickets cannot be constructed, but they can be destructed into values. Equivalent to  followed by . <Make a non-atomic write to the counter. No memory-barrier. &Compare and swap for the counter ADT.    None None'When performing compare-and-swaps, the ticket encapsulates proof ? that a thread observed a specific previous value of a mutable * variable. It is provided in lieu of the old value to  compare-and-swap. 16This alternate version of casMutVar returns an opaque ticket for  future CAS operations. OUnsafe, machine-level atomic compare and swap on an element within an Array. 12345 12345None Compare-and-swap $This variant takes two tickets: the new" value is a ticket rather than an # arbitrary, lifted, Haskell value. :Performs a machine-level compare and swap operation on an  6. Returns a tuple containing a 7 which is 8 when a # swap is performed, along with the current value from the 6. Note "compare"- here means pointer equality in the sense of  9. )This variant takes two tickets, i.e. the new" value is a ticket rather than an # arbitrary, lifted, Haskell value. 7A ticket contains or can get the usable Haskell value. "MutVar counterpart of . #)This variant takes two tickets, i.e. the new" value is a ticket rather than an # arbitrary, lifted, Haskell value. $3Memory barrier implemented by the GHC rts (SMP.h). %3Memory barrier implemented by the GHC rts (SMP.h). &3Memory barrier implemented by the GHC rts (SMP.h). The 6 containing a value current A ticket for the old value The new value to replace current if old == current A ticket for the old value A ticket for the new value :!"#$%& !"#$%& !"#$%& :!"#$%&None*5Create a new counter initialized to the given value. +NTry repeatedly until we successfully increment the counter by a given amount. < Returns the original value of the counter (pre-increment). ,Just like the  Data.Atomics/ CAS interface, this routine returns an opaque , ticket that can be used in CAS operations. -NOpaque tickets cannot be constructed, but they can be destructed into values. .Equivalent to , followed by -. /<Make a non-atomic write to the counter. No memory-barrier. 0&Compare and swap for the counter ADT. '()*+,-./0 '()*+,-./0 ()'*+,-./0 '()*+,-./0;           !"#     $%&'()*+,-.,-/,0123atomic-primops-0.3Data.Atomics.Counter.ReferenceData.Atomics.Counter.ForeignData.Atomics.Internal Data.AtomicsData.Atomics.Counter.IORefData.Atomics.CounterCTicket AtomicCounter newCounter incrCounterreadCounterForCAS peekCTicket readCounter writeCounter casCounterTicketstg_writeBarrier#stg_loadLoadBarrier#stg_storeLoadBarrier# casArray# readForCAS#casMutVarTicketed# casArrayElem casArrayElem2 readArrayElem readForCAScasIORef casIORef2 peekTicketreadMutVarForCAS casMutVar casMutVar2storeLoadBarrierloadLoadBarrier writeBarriercasMutVar_TypeErased#casArrayTypeErased#ptrEq$fEqAny $fShowAnybase GHC.IORefIORefghc-prim GHC.TypesBoolTrueGHC.PrimreallyUnsafePtrEquality#seal