Performance. There is practically no overhead when compared to operating on pure values,
although there is a higher memory overhead, since PVar is backed by a
MutableByteArray#
Atomic operations for PVars with Int values. This includes a unique function that is
not available in ghc-prim out of the box:
atomicModifyIntPVar :: PrimMonad m => PVar m Int -> (Int -> (Int, a)) -> m a
Works in PrimMonad, therefore it is usable with ST, IO and various transformer monads.
Easy access to PVar contents with Storable
isByteArrayPinned, isMutableByteArrayPinned function that work on ghc-7.10 and
ghc-8.0 as well as all the newer ones.
Changes
Changelog for pvar
1.0.0.0
Switch to MonadPrim type classes that was introduced in primitive-0.7.1.0
Fix definition PVar m a -> PVar a s. Parametrization on a monad is not general
enough for some cases and making state token s last allows to use it with forall
easier.
Relax monad in conversion to ForeignPtr
0.2.0.0
Rename modifyPVar to fetchModifyPVar and modifyPVarM to fetchModifyPVarM. This
is a breaking change in favor of consistency with other librarries.
New implementation for modifyPVar and modifyPVarM that can return some artifact.
Addition of modifyFetchPVar and modifyFetchPVarM
Addition of atomicModifyFetchIntPVar and atomicFetchModifyIntPVar
0.1.1.0
Addition of backwards compatible:
isByteArrayPinned, isMutableByteArrayPinned (that work on ghc-7.10 and ghc-8.0)