!GA      !"#$%&'()*+,-./0123456789:;<=>?@(c) Alexey Kuleshevich 2020BSD3%Alexey Kuleshevich <lehins@yandex.ru> experimental non-portableNone =?FHVX/ pvar&Mutable variable with primitive value. pvarCreate a mutable variable in unpinned memory (i.e. GC can move it) with an initial value. This is a prefered way to create a mutable variable, since it will not contribute to memory fragmentation. For pinned memory versions see   and  pvar>Create a mutable variable in unpinned and unititialized memory pvarACreate a mutable variable in pinned memory with an initial value.pvarECreate a mutable variable in pinned memory with uninitialized memory.pvar_Create a mutable variable in pinned memory with an initial value and aligned according to its Apvar9Create a mutable variable in pinned uninitialized memory.pvarCreate a mutable variable in pinned uninitialized memory using Storable interface for getting the number of bytes for memory allocation.pvarCreate a mutable variable in pinned uninitialized memory using Storable interface for getting the number of bytes for memory allocation and alignement.pvarYGet the address to the contents. This is highly unsafe, espcially if memory is not pinnedpvarUse " reading functionality inside the .pvarUse ! wrting functionality inside the .pvar$Read a value from a mutable variablepvar%Write a value into a mutable variablepvarDGet the size of the mutable variable in bytes as an unpacked integerpvarIGet the alignment of the mutable variable in bytes as an unpacked integerpvar=Size in bytes of a value stored inside the mutable variable.  + itself is neither accessed nor evaluated.pvarGAlignment in bytes of the value stored inside of the mutable variable.  + itself is neither accessed nor evaluated.pvar Check if  " is backed by pinned memory or notpvarUsing B9 perform atomic modification of an integer element in a C . Implies a full memory barrier.pvar,Apply a function to an integer element of a  , atomically. Implies a full memory barrier. pvarUses B< to perform atomic modification of an integer element in a C . Implies a full memory barrier.!pvar,Apply a function to an integer element of a  C atomically. Returns the old value. Implies a full memory barrier.Dpvar Values are already written into  ! in NF, this instance is trivial.Epvar+ will result in a new copy of a  pvarArray to be mutatedpvarIndex in number of F elements into the Cpvar0Function to be applied atomically to the elementpvarStarting state pvarArray to be mutatedpvarIndex in number of F elements into the Cpvar0Function to be applied atomically to the elementpvarStarting state G !(c) Alexey Kuleshevich 2020BSD3%Alexey Kuleshevich <lehins@yandex.ru> experimental non-portableNoneFXO "pvarConvert   into a H-, very unsafe if not backed by pinned memory.#pvarExtract the address to the mutable variable, but only if it is backed by pinned memory. It is unsafe because even for pinned memory memory can be deallocated if associated   goes out of scope. Use  or  instead.$pvar0Fill the contents of mutable variable with byte c%pvar-Reset contents of a mutable variable to zero.&pvarCopy the value from a mutable variable into a mutable array at the specified index. Index of array is not checked and can result in an unchecked exception when incorrect'pvarCopy the value from a frozen I into a mutable variable at specified index. Index of array is not checked and can result in an unchecked exception when incorrect(pvarCopy the value from MutableByteArray at specified index into the mutable variable. Index of array is not checked and can result in an unchecked exception when incorrectJpvar.Copy the value from a mutable variable into a K at the specified offset in number of bytes. Offset into the array is not checked and can result in an unchecked exception when incorrectLpvarCopy the value from a frozen I at the specified offset in number of bytes into a mutable variable. Offset into the array is not checked and can result in an unchecked exception when incorrectMpvarCopy the value from a K at an offset in bytes into the mutable variable. Offset into the array is not checked and can result in an unchecked exception when incorrect)pvarShow the type name$pvarByte value to fill the   with&pvar+Offset in number of elements into the array'pvar Source arraypvar+Offset in number of elements into the array(pvar+Offset in number of elements into the arrayJpvarOffset in bytes into the arrayLpvar Source arraypvarOffset in bytes into the arrayMpvarOffset in bytes into the array  "#$%&'() #"%$ '(&)(c) Alexey Kuleshevich 2020BSD3%Alexey Kuleshevich <lehins@yandex.ru> experimental non-portableNoneFSX*pvarRun an  action on a mutable variable.+pvarApply an action to the Nv that references the mutable variable, but only if it is backed by pinned memory, cause otherwise it would be unsafe.,pvarConvert   into a H,, but only if it is backed by pinned memory.-pvar&Copy contents of one mutable variable   into another.pvar$Copy contents of a mutable variable   into a pointer N/pvarSApply a pure function to the contents of a mutable variable. Returns the old value.0pvar<Apply a pure function to the contents of a mutable variable.1pvarTApply a monadic action to the contents of a mutable variable. Returns the old value.2pvar=Apply a monadic action to the contents of a mutable variable.3pvarASwap contents of two mutable variables. Returns their old values.4pvar'Swap contents of two mutable variables.5pvar'Apply an action to the newly allocated   and to the NI that references it. Memory allocated with number of bytes specified by O a is allocated and pinned, therefore it is safe to operate directly with the pointer as well as over FFI. Returning the pointer from the supplied action would be very unsafe, therefore return the  i if you still need it afterwards, garbage colelctor will cleanup the memory when it is no longer needed.6pvarSame 5(, except memory is aligned according to P.7pvar Create a new  I in pinned memory with an initial value in it aligned on the size of an Q . Implies a full memory barrier.8pvarWrite a value into an  + atomically. Implies a full memory barrier.9pvar?Compare and swap. This is a function that is used to implement  modifyIntPVar!. Implies a full memory barrier.:pvar Add two numbers, corresponds to Re done atomically. Returns the previous value of the mutable variable. Implies a full memory barrier.;pvar%Subtract two numbers, corresponds to Se done atomically. Returns the previous value of the mutable variable. Implies a full memory barrier.<pvar(Binary conjuction (AND), corresponds to Te done atomically. Returns the previous value of the mutable variable. Implies a full memory barrier.=pvar8Binary negation of conjuction (Not AND), corresponds to \x y ->  complement (x T y)e done atomically. Returns the previous value of the mutable variable. Implies a full memory barrier.>pvar(Binary disjunction (OR), corresponds to Ue done atomically. Returns the previous value of the mutable variable. Implies a full memory barrier.?pvar3Binary exclusive disjunction (XOR), corresponds to xore done atomically. Returns the previous value of the mutable variable. Implies a full memory barrier.@pvar,Binary negation (NOT), corresponds to ones'  complemente done atomically. Returns the previous value of the mutable variable. Implies a full memory barrier.*pvar.Initial value assigned to the mutable variablepvar Action to runpvarResult produced by the  action-pvarSource variablepvarDestination variable5pvar Initial valuepvar Action to run6pvar Initial valuepvar Action to run9pvarVariable to mutatepvarOld expected valuepvar New valuepvarOld actual value- !*+,-./0123456789:;<=>?@- *0/2143- +56.,!789:;<=>?@V     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS TUVWXVYZ[ \] ^ M_` ab ac de dfg#pvar-0.1.0.0-2VtL8jA7byN1RLMt1j0WV5Data.Primitive.PVarData.Primitive.PVar.UnsafeData.Primitive.PVar.Internal withPtrPVar toForeignPtrghc-primGHC.Prim RealWorldbaseGHC.STSTForeign.StorablepokepeekStorablerunST'primitive-0.7.0.1-4OYEE8uw8FE1Ko7THF1ebData.Primitive.TypesPrimControl.Monad.Primitive PrimState PrimMonadPVarnewPVarrawPVar newPinnedPVar rawPinnedPVarnewAlignedPinnedPVarrawAlignedPinnedPVarrawStorablePVarrawAlignedStorablePVarunsafeToPtrPVarpeekPrimpokePrimreadPVar writePVar sizeOfPVar#alignmentPVar# sizeOfPVar alignmentPVarunI# isPinnedPVaratomicModifyIntArray#atomicModifyIntPVaratomicModifyIntArray_#atomicModifyIntPVar_unsafeToForeignPtrPVar toPtrPVarsetPVar#zeroPVarcopyPVarToMutableByteArraycopyFromByteArrayPVarcopyFromMutableByteArrayPVar showsType withPVarSTtoForeignPtrPVarcopyPVar copyPVarToPtr modifyPVar modifyPVar_ modifyPVarM modifyPVarM_ swapPVars swapPVars_withStorablePVarwithAlignedStorablePVaratomicReadIntPVaratomicWriteIntPVar casIntPVaratomicAddIntPVaratomicSubIntPVaratomicAndIntPVaratomicNandIntPVaratomicOrIntPVaratomicXorIntPVaratomicNotIntPVar alignment casIntArray#MutableByteArray# $fNFDataPVar$fStorablePVarInt#runWithPokedPtrGHC.ForeignPtr ForeignPtrData.Primitive.ByteArray ByteArraycopyBytesPVarToMutableByteArrayMutableByteArraycopyBytesFromByteArrayPVar!copyBytesFromMutableByteArrayPVarGHC.PtrPtrsizeOf GHC.TypesIntGHC.Num+subtract Data.Foldableandor