!Z~S      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRNoneG 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. interprocessKRead a shared object name from somwhere referenced by a handle. Returns Nothing if hGetBuf gets less than 32F 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. interprocessSUse a pointer to a C string to pass to some low-level (e.g. foreign) functions. , is asserted immutable, so do not modify it!S interprocessaCheck first if two CString point to the same memory location. Otherwise, compare them using C strcmp function.NonebNone VZ   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 T[ instance to make the value accessible in different memory spaces. Thus, the content of  StoredMVar0 is forced to be fully evaluated and serialized.U interprocess*Opaque implementation-dependent StoredMVarV interprocessDoes not wait and can be unsafeW interprocessWaits a bit and may be unsafeX interprocess'Waits a lot and should be interruptibleY interprocessDoes not wait and can be unsafeZ interprocess'Waits a lot and should be interruptible[ interprocessWaits a bit and may be unsafe\ interprocess'Waits a lot and should be interruptible] interprocessWaits a bit and may be unsafe^ interprocess'Waits a lot and should be interruptible  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.M 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 .D 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.X 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 _ if the   was empty, or ` a if the   was full with contents a . After , the   is left empty. interprocessA non-blocking version of  . The ' function returns immediately, with _ if the   was empty, or ` a if the   was full with contents a. interprocessA non-blocking version of  . The ' function attempts to put the value a into the   , returning a if it was successful, or b 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). interprocessE is an exception-safe wrapper for operating on the contents of an  U. This operation is exception-safe: it will replace the original contents of the  # if an exception is raised (see Control.ExceptionJ). However, it is only atomic if there are no other producers for this  . interprocessLike  , but the IOR 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 IOR action in the second argument is executed with asynchronous exceptions masked. interprocessLike  , but the IOR action in the second argument is executed with asynchronous exceptions masked.   Nonep)! interprocess![ is a quantity semaphore in which the resource is aqcuired and released in units of one.c interprocess)Opaque implementation-dependent semaphore" interprocess Build a new !N with a supplied initial quantity. The initial quantity must be at least 0.XThis 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 !P 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 availableXThis 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 availableXThis function throws an exception if an underlying platform-dependent function fails.!"#$%&'!"#%&'$None16GKt,) interprocess0Opaque pointer to the allocator type defined in C code.* interprocessC5 structure, should not be inspected from Haskell code+ interprocessBSpecial pointer format to pass between memory spaces of processes.)*+,-./0123456789:;<=>?@+)*76543210/@?>=<;:98.-,None~fG 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 interprocessIReconstruct 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 )L 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)IJKLMNOPQRd      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefZghZgijkljkmno+interprocess-0.2.0.0-DC6adn7fr7T8x6MAVqAq8q!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 mallocBytesreallocfree cmpCStringsbaseForeign.StorableStorable StoredMVarTc'mvar_isemptyc'mvar_tryswap c'mvar_swapc'mvar_tryread c'mvar_read c'mvar_tryput c'mvar_putc'mvar_trytake c'mvar_takeGHC.BaseNothingJustghc-prim GHC.TypesTrueFalseQSemT