!G      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF(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 memorypvarACreate 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 pvar9Create 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 not"pvarUsing G9 perform atomic modification of an integer element in a H . Implies a full memory barrier.#pvar,Apply a function to an integer element of a  , atomically. Implies a full memory barrier.$pvarUses G< to perform atomic modification of an integer element in a H . 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.Ipvar Values are already written into  ! in NF, this instance is trivial.Jpvar+ will result in a new copy of a  "pvarArray to be mutatedpvarIndex in number of K elements into the Hpvar0Function to be applied atomically to the elementpvarStarting state$pvarArray to be mutatedpvarIndex in number of K elements into the Hpvar0Function to be applied atomically to the elementpvarStarting state L !"#$%(c) Alexey Kuleshevich 2020BSD3%Alexey Kuleshevich <lehins@yandex.ru> experimental non-portableNoneFXV7 &pvarConvert   into a M-, 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 N 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 incorrectOpvar.Copy the value from a mutable variable into a P at the specified offset in number of bytes. Offset into the array is not checked and can result in an unchecked exception when incorrectQpvarCopy the value from a frozen N 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 incorrectRpvarCopy the value from a P 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.pvarCheck whether or not the N is pinned.Note - This function uses GHC built-in functions for GHC 8.2 and newer, but for older versions it fallsback onto custom implementation./pvarCheck whether or not the P is pinned.Note - This function uses GHC built-in functions for GHC 8.2 and newer, but for older versions it fallsback onto custom implementation.(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 arrayOpvarOffset in bytes into the arrayQpvar Source arraypvarOffset in bytes into the arrayRpvarOffset in bytes into the array  "$&'()*+,-./ '&)("$+,*./- (c) Alexey Kuleshevich 2020BSD3%Alexey Kuleshevich <lehins@yandex.ru> experimental non-portableNoneFSX0pvarRun an  action on a mutable variable.1pvarApply an action to the Sv that references the mutable variable, but only if it is backed by pinned memory, cause otherwise it would be unsafe.2pvarConvert   into a M,, but only if it is backed by pinned memory.3pvar&Copy contents of one mutable variable   into another4pvar$Copy contents of a mutable variable   into a pointer S5pvarSApply a pure function to the contents of a mutable variable. Returns the old value.6pvar<Apply a pure function to the contents of a mutable variable.7pvarTApply a monadic action to the contents of a mutable variable. Returns the old value.8pvar=Apply a monadic action to the contents of a mutable variable.9pvarASwap contents of two mutable variables. Returns their old values.:pvar'Swap contents of two mutable variables.;pvar'Apply an action to the newly allocated   and to the SI that references it. Memory allocated with number of bytes specified by T 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.<pvarSame ;(, except memory is aligned according to U.=pvar Create a new  I in pinned memory with an initial value in it aligned on the size of an V . Implies a full memory barrier.>pvarWrite a value into an  + atomically. Implies a full memory barrier.?pvar?Compare and swap. This is a function that is used to implement  modifyIntPVar!. Implies a full memory barrier.@pvar Add two numbers, corresponds to We done atomically. Returns the previous value of the mutable variable. Implies a full memory barrier.Apvar%Subtract two numbers, corresponds to Xe done atomically. Returns the previous value of the mutable variable. Implies a full memory barrier.Bpvar(Binary conjuction (AND), corresponds to Ye done atomically. Returns the previous value of the mutable variable. Implies a full memory barrier.Cpvar8Binary negation of conjuction (Not AND), corresponds to \x y ->  complement (x Y y)e done atomically. Returns the previous value of the mutable variable. Implies a full memory barrier.Dpvar(Binary disjunction (OR), corresponds to Ze done atomically. Returns the previous value of the mutable variable. Implies a full memory barrier.Epvar3Binary exclusive disjunction (XOR), corresponds to xore done atomically. Returns the previous value of the mutable variable. Implies a full memory barrier.Fpvar,Binary negation (NOT), corresponds to ones'  complemente done atomically. Returns the previous value of the mutable variable. Implies a full memory barrier.0pvar.Initial value assigned to the mutable variablepvar Action to runpvarResult produced by the  action3pvarSource variablepvarDestination variable;pvar Initial valuepvar Action to run<pvar Initial valuepvar Action to run?pvarVariable to mutatepvarOld expected valuepvar New valuepvarOld actual value/ !#%0123456789:;<=>?@ABCDEF/ 06587:931;<42!#%=>?@ABCDEF [       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX YZ[\][^_` ab  cd ef eg hi hjk#pvar-0.1.1.0-BIdyptBEt7HKCdvrik4fIEData.Primitive.PVarData.Primitive.PVar.UnsafeData.Primitive.PVar.Internal withPtrPVar toForeignPtrghc-primGHC.Prim RealWorldisMutableByteArrayPinned#isByteArrayPinned#baseGHC.STSTForeign.StorablepokepeekStorablerunST'primitive-0.7.0.1-4OYEE8uw8FE1Ko7THF1ebData.Primitive.Types alignmentsizeOfPrimControl.Monad.Primitive PrimState PrimMonadPVarnewPVarrawPVar newPinnedPVar rawPinnedPVarnewAlignedPinnedPVarrawAlignedPinnedPVarrawStorablePVarrawAlignedStorablePVarunsafeToPtrPVarpeekPrimpokePrimreadPVar writePVar sizeOfPVar#alignmentPVar# sizeOfPVar alignmentPVarunI# isPinnedPVaratomicModifyIntArray#atomicModifyIntPVaratomicModifyIntArray_#atomicModifyIntPVar_unsafeToForeignPtrPVar toPtrPVarsetPVar#zeroPVarcopyPVarToMutableByteArraycopyFromByteArrayPVarcopyFromMutableByteArrayPVar showsTypeisByteArrayPinnedisMutableByteArrayPinned withPVarSTtoForeignPtrPVarcopyPVar copyPVarToPtr modifyPVar modifyPVar_ modifyPVarM modifyPVarM_ swapPVars swapPVars_withStorablePVarwithAlignedStorablePVaratomicReadIntPVaratomicWriteIntPVar casIntPVaratomicAddIntPVaratomicSubIntPVaratomicAndIntPVaratomicNandIntPVaratomicOrIntPVaratomicXorIntPVaratomicNotIntPVar casIntArray#MutableByteArray# $fNFDataPVar$fStorablePVarInt#runWithPokedPtrGHC.ForeignPtr ForeignPtrData.Primitive.ByteArray ByteArraycopyBytesPVarToMutableByteArrayMutableByteArraycopyBytesFromByteArrayPVar!copyBytesFromMutableByteArrayPVarGHC.PtrPtr GHC.TypesIntGHC.Num+subtract Data.Foldableandor