h$"X       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRNoneE interprocess=Reference to a shared object; can be sent to other processes. interprocessWrite a shared object name into somwhere referenced by a handle. Useful for sending references to other processes via pipes. interprocessRead a shared object name from somwhere referenced by a handle. Returns Nothing if hGetBuf gets less than 32 bytes. Useful for sending references to other processes via pipes. interprocess)Generate a new unique shared object name. interprocess"Allocate a new shared object name. interprocessUse a pointer to a C string to pass to some low-level (e.g. foreign) functions. , is asserted immutable, so do not modify it!NonepNone   interprocessAn   is a synchronising variable, used for communication between concurrent processes or threads. It can be thought of as a a box, which may be empty or full. StoredMVar tries to mimic vanilla MVar2, though it behaves quite differently. It uses S instance to make the value accessible in different memory spaces. Thus, the content of  StoredMVar0 is forced to be fully evaluated and serialized.  interprocess Create a   which is initially empty. interprocess Create a   which is initially empty. interprocessFind a  7 created in another process ot thread by its reference. interprocessGet a global reference to the  ;. Send this reference to another process to lookup this  ) and start interprocess communication. interprocessCheck whether a given   is empty.Notice that the boolean value returned is just a snapshot of the state of the MVar. By the time you get to react on its result, the MVar may have been filled (or emptied) - so be extremely careful when using this operation. Use  instead if possible. interprocessReturn the contents of the   . If the   is currently empty, & will wait until it is full. After a  , the   is left empty. is single-wakeup. That is, if there are multiple processes blocked in  , and the  5 becomes full, only one thread will be woken up.The library makes no guarantees about the order in which processes are woken up. This is all up to implementation-dependent OS scheduling. interprocess#Atomically read the contents of an   . If the   is currently empty,  will wait until its full. # is guaranteed to receive the next . is multiple-wakeup, so when multiple readers are blocked on an  ,, all of them are woken up at the same time. interprocess Atomically take a value from an  , put a new value into the   and return the value taken. interprocessPut a value into an   . If the   is currently full, " will wait until it becomes empty. is single-wakeup. That is, if there are multiple threads or processes blocked in  , and the  6 becomes empty, only one thread will be woken up.The library makes no guarantees about the order in which processes are woken up. This is all up to implementation-dependent OS scheduling. interprocessA non-blocking version of . The ' function returns immediately, with T if the   was empty, or U a if the   was full with contents a . After , the   is left empty. interprocessA non-blocking version of  . The ' function returns immediately, with T if the   was empty, or U a if the   was full with contents a. interprocessA non-blocking version of  . The ' function attempts to put the value a into the   , returning V if it was successful, or W otherwise. interprocessA non-blocking version of -. Atomically attempt take a value from an  , put a new value into the  0 and return the value taken (thus, leave the   full). Return Nothing if the   was empty (and leave it empty). interprocess is an exception-safe wrapper for operating on the contents of an  . This operation is exception-safe: it will replace the original contents of the  # if an exception is raised (see Control.Exception). However, it is only atomic if there are no other producers for this  . interprocessLike  , but the IO action in the second argument is executed with asynchronous exceptions masked. interprocess;An exception-safe wrapper for modifying the contents of an   . Like , . will replace the original contents of the   if an exception is raised during the operation. This function is only atomic if there are no other producers for this  . interprocessA slight variation on ( that allows a value to be returned (b+) in addition to the modified value of the  . interprocessLike  , but the IO action in the second argument is executed with asynchronous exceptions masked. interprocessLike  , but the IO action in the second argument is executed with asynchronous exceptions masked.   None! interprocess! is a quantity semaphore in which the resource is aqcuired and released in units of one." interprocess Build a new ! with a supplied initial quantity. The initial quantity must be at least 0.This function throws an exception if an underlying platform-dependent function fails.# interprocessLookup QSem by its name in the global namespace. Use this function to init several entangled semaphores in different processes.(This function throws an exception if no ! with this name exist, or if an underlying platform-dependent function fails.$ interprocessGet a global reference to the semaphore. Send this reference to another process to lookup this semaphore and start interprocess communication.% interprocess#Wait for a unit to become availableThis function throws an exception if an underlying platform-dependent function fails.& interprocessTry to take a unit of the !.7This function does not wait, in fact. Sorry for naming.Returns:True if successfully took a unit of ! (it is decremented)False+ if number of available units is less than 1 (it is not decremented)*This function does not throw an exception.' interprocessSignal that a unit of the ! is availableThis function throws an exception if an underlying platform-dependent function fails.!"#$%&'!"#%&'$None38) interprocess0Opaque pointer to the allocator type defined in C code.* interprocessC5 structure, should not be inspected from Haskell code+ interprocessSpecial pointer format to pass between memory spaces of processes.)*+,-./0123456789:;<=>?@+)*76543210/@?>=<;:98.-,None ~G interprocessMake a portable shared pointer out of a regular pointer. The result can be transfered to another process and re-created using the shared ).H interprocessReconstruct a regular pointer from a portable shared pointer. Returns NULL. if shared pointer or allocator are not valid.I interprocess Create a new ).J interprocess Lookup a ) by its name. Use this to share one allocator between multiple processes.K interprocessDestroy allocator instance. Note: memory is fully unlinked and released only after the last allocator sharing the memory is destroyed.)+GHIJKLMNOPQR+GH)IJKLMNOPQR      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[Y\]Y\^_`a_`b+interprocess-0.2.1.0-30Otn9jPGYlABlDsfE0e5S!Foreign.SharedObjectName.Internal%Control.Concurrent.Process.StoredMVarControl.Concurrent.Process.QSemForeign.SharedPtr.CForeign.SharedPtrForeign.SharedObjectNameSOName hPutSOName hGetSOName genSONamenewEmptySONameunsafeWithSOName$fStorableSOName $fOrdSOName $fEqSOName $fReadSOName $fShowSOName StoredMVar newEmptyMVarnewMVar lookupMVarmVarName isEmptyMVartakeMVarreadMVarswapMVarputMVar tryTakeMVar tryReadMVar tryPutMVar trySwapMVarwithMVarwithMVarMasked modifyMVar_ modifyMVarmodifyMVarMasked_modifyMVarMasked$fEqStoredMVarQSemnewQSem lookupQSemqSemNamewaitQSem tryWaitQSem signalQSem$fEqQSem Allocator AllocatorT SharedPtrp'vk_shared_freep'vk_shared_reallocp'vk_shared_malloc c'shared_freec'shared_reallocc'shared_mallocc'shared_shPtrToPtrc'shared_ptrToShPtrc'shared_getStoreNamec'shared_destroyAllocatorc'shared_lookupAllocatorc'shared_createAllocator p'shared_freep'shared_reallocp'shared_mallocp'shared_shPtrToPtrp'shared_ptrToShPtrp'shared_getStoreNamep'shared_destroyAllocatorp'shared_lookupAllocatorp'shared_createAllocator $fEqSharedPtr$fOrdSharedPtr$fShowSharedPtr$fDataSharedPtr$fGenericSharedPtr$fStorableSharedPtr toSharedPtr fromSharedPtrcreateAllocatorlookupAllocatordestroyAllocatorwithNewAllocator withAllocatorallocStoreNamemalloc mallocBytesreallocfreebaseForeign.StorableStorable GHC.MaybeNothingJustghc-prim GHC.TypesTrueFalse