!r,      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                                                ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Errno provided by libuv(c) Winterland, 2017-2018BSDdrkoster@qq.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqc'KeZ-IOtoo many linksfZ-IOno such device or addressgZ-IO end of filehZ-IO unknown erroriZ-IOcross-device link not permittedjZ-IOtext file is busykZ-IOconnection timed outlZ-IOno such processmZ-IO invalid seeknZ-IO-cannot send after transport endpoint shutdownoZ-IOread-only file systempZ-IOresult too largeqZ-IOprotocol wrong type for socketrZ-IOprotocol not supportedsZ-IOprotocol errortZ-IO broken pipeuZ-IOoperation not permittedvZ-IO!operation not supported on socketwZ-IOsocket operation on non-socketxZ-IOdirectory not emptyyZ-IOnot a directoryzZ-IOsocket is not connected{Z-IOfunction not implemented|Z-IOno space left on device}Z-IOprotocol not available~Z-IOmachine is not on the networkZ-IOnot enough memoryZ-IOno such file or directoryZ-IOno such deviceZ-IOno buffer space availableZ-IOfile table overflowZ-IOnetwork is unreachableZ-IOnetwork is downZ-IO name too longZ-IOmessage too longZ-IOtoo many open filesZ-IO#too many symbolic links encounteredZ-IO illegal operation on a directoryZ-IOsocket is already connectedZ-IO i/o errorZ-IOinvalid argumentZ-IOinterrupted system callZ-IOhost is unreachableZ-IOfile too largeZ-IO#bad address in system call argumentZ-IOfile already existsZ-IOdestination address requiredZ-IOconnection reset by peerZ-IOconnection refusedZ-IO software caused connection abortZ-IOinvalid Unicode characterZ-IOoperation canceledZ-IOresource busy or lockedZ-IObad file descriptorZ-IOconnection already in progressZ-IOsocket type not supportedZ-IO%service not available for socket typeZ-IOresolved protocol is unknownZ-IOargument buffer overflowZ-IOunknown node or serviceZ-IO no addressZ-IO out of memoryZ-IOai_family not supportedZ-IOpermanent failureZ-IOrequest canceledZ-IOinvalid value for hintsZ-IObad ai_flags valueZ-IOtemporary failureZ-IOaddress family not supportedZ-IO resource temporarily unavailableZ-IOaddress family not supportedZ-IOaddress not availableZ-IOaddress already in useZ-IOpermission deniedZ-IOargument list too longOcdefghijklmnopqrstuvwxyz{|}~Odc~}|{zyxwvutsrqponmlkjihgfeExtensible IO exceptions(c) Dong Han, 2017-2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqs Z-IOIO exceptions informations.Z-IO8the errno name, e.g. EADDRINUSE, etc. empty if no errno.Z-IO`description for this io error, can be errno description, or some custom description if no errno.Z-IOlightweight partial call-stackZ-IO^The root type of all io exceptions, you can catch all io exception by catching this root type.Z-IOThrow  if allocation return a .Z-IOHThrow appropriate IO exception if return value < 0 (libuv's convention).Z-IOPThrow appropriate IO exception if return value < 0, otherwise ignore the result.Z-IOThrow  with name ECLOSED& and description 'resource is closed'.Z-IOthe allocation actionZ-IO the IO actionZ-IO the IO action  ! #"%$'&)(*+,-/.1032547698;:@?>=<DEFGHIJKLPONMQTRSYXWV`_^]\[ZabU  ! #"%$'&)(*+,-/.1032547698;:@?>=<DEFGHIJKLPONMQTRSRYXWV`_^]\[ZbUa TCP/UDP socket address API(c) Winterland, 2018BSDdrkoster@qq.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqZ-IOPort number. Use the Num. instance (i.e. use a literal) to create a  PortNumber value.1 :: PortNumber1read "1" :: PortNumber1show (12345 :: PortNumber)"12345"50000 < (51000 :: PortNumber)True50000 < (52000 :: PortNumber)True50000 + (10000 :: PortNumber)60000Z-IO'Independent of endianness. For example ::1 is stored as  (0, 0, 0, 1).For direct manipulation prefer ; and <.Z-IO'Independent of endianness. For example  127.0.0.1 is stored as (127, 0, 0, 1).For direct manipulation prefer 7 and 8.Z-IO&IPv4 or IPv6 socket address, i.e. the  sockaddr_in or  sockaddr_in6 struct.$Z-IOFUsed in getAddrInfo hints, for any type can be returned by getAddrInfo*Z-IOInternet Protocol version 6+Z-IOinternetwork: UDP, TCP, etc,Z-IO unspecified.Z-IOCConvert a string containing an IPv4 addresses to a binary structure3This is partial function, wrong address will throw  exception./Z-IOCConvert a string containing an IPv6 addresses to a binary structure3This is partial function, wrong address will throw  exception.0Z-IO 0.0.0.01Z-IO 255.255.255.2552Z-IO 255.255.255.2553Z-IO  127.0.0.14Z-IO  224.0.0.05Z-IO  224.0.0.16Z-IO  224.0.0.2557Z-IO Converts @ to representation-independent IPv4 quadruple. For example for  127.0.0.1 the function will return (127, 0, 0, 1) regardless of host endianness.8Z-IOConverts IPv4 quadruple to .9Z-IO :::Z-IO ::1;Z-IOconvert  to octets.<Z-IOconvert  from octets.?Z-IOPass  to FFI as pointer.@Z-IOPass  to FFI as pointer.,USE THIS FUNCTION WITH UNSAFE FFI CALL ONLY.BZ-IOAllocate space for sockaddr_storage and pass to FFI.CZ-IOAllocate space for sockaddr_storage and pass to FFI.,USE THIS FUNCTION WITH UNSAFE FFI CALL ONLY.GZ-IO :0;  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG;./-?@ABCD0123456789:;<G,+*()%'&$ #"! =>EF"Low resolution (0.1s) timing wheel(c) Dong Han, 2017-2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqbZ-IOTimer registered by g or i.Z-IOA simple timing wheeldZ-IO=Create new low resolution timer manager on capability change.tSince low resolution timer manager is not hooked into RTS, you're responsible to call this function after you call > to match timer manager array size with new capability number.OThis is not a must though, when we fetch timer manager we always take a modulo.eZ-IOGet a c for current thread.fZ-IO+Check if a timer manager's wheel is turning#This is mostly for testing purpose.gZ-IOgRegister a new timer on current capability's timer manager, start the timing wheel if it's not turning.hIf the action could block, you may want to run it in another thread. Example to kill a thread after 10s: 4 registerLowResTimer 100 (forkIO $ killThread tid) hZ-IO (g t action)iZ-IOSame as g%, but allow you choose timer manager.jZ-IO2Query how many seconds remain before timer firing.;A return value <= 0 indictate the timer is firing or fired.kZ-IO+Cancel a timer, return the remaining ticks.6This function have no effect after the timer is fired.lZ-IO void . cancelLowResTimermZ-IO similar to <, this function put a limit on time which an IO can consume.,Note timeoutLowRes is also implemented with YN underhood, which can have some surprising effects on some devices, e.g. use m with reading or writing on UVStreams may close the UVStream: once a reading or writing is not able to be done in time.nZ-IO Similar to m, but raise a & to current thread instead of return  if timeout.Z-IOICheck if low resolution timer manager loop is running, start loop if not.Z-IOhStart low resolution timer loop, the loop is automatically stopped if there's no more new registrations.Z-IOQScan the timeout queue in current tick index, and move tick index forward by one.oZ-IO-Cache result of an IO action for give time t.This combinator is useful when you want to share IO result within a period, the action will be called on demand, and the result will be cached for t milliseconds.One common way to get a shared periodical updated value is to start a seperate thread and do calculation periodically, but doing that will stop system from being idle, which stop idle GC from running, and in turn disable deadlock detection, which is too bad. This function solves that.pZ-IO-Throttle an IO action without caching result.nThe IO action will run at leading edge. i.e. once run, during following (t/10)s throttled action will no-ops./Note the action will run in the calling thread.qZ-IO Similar to p but run action in trailing edgeThe IO action will run at trailing edge. i.e. no matter how many times throttled action are called, original action will run only once after (t/10)s.4Note the action will be run in a new created thread.gZ-IOtimeout in unit of 0.1sZ-IO3the action you want to perform, it should not blockhZ-IOtimeout in unit of 0.1sZ-IO3the action you want to perform, it should not blockiZ-IOa low resolution timer managerZ-IOtimeout in unit of 0.1sZ-IO3the action you want to perform, it should not blockmZ-IOtimeout in unit of 0.1snZ-IOtimeout in unit of 0.1soZ-IOcache time in unit of 0.1sZ-IOthe original IO actionZ-IOthrottled IO actionpZ-IOcache time in unit of 0.1sZ-IOthe original IO actionZ-IOthrottled IO actionqZ-IOthe original IO actionZ-IOthrottled IO actionbcdefghijklmnopqghibjklmnopqcefdThe Resource monad(c) Dong Han, 2017BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkq tZ-IO.A high performance resource pool based on STM.We choose to not divide pool into strips due to the difficults in resource balancing. If there is a high contention on resource (see @), just increase the maximum number of resources can be opened.Z-IOA single resource pool entry.yZ-IOA y is an v action which acquires some resource of type a and also returns a finalizer of type IO () that releases the resource.The only safe way to use a y is ~ and 'withResource\'', You should not use the {k field directly, unless you want to implement your own resource management. In the later case, you should H {M since some resource initializations may assume async exceptions are masked.+ instance is provided so that you can lift  computation inside y%, this is convenient for propagating y around since many  computations carry finalizers.3A convention in Z-IO is that functions returning a y should be named in initXXXB format, users are strongly recommended to follow this convention.3There're two additional guarantees we made in Z-IO:8All resources in Z-IO can track its own liveness, throw  exception using  or ) when used after resource is closed.5All resources' clean up action in Z-IO is idempotent.Library authors providing initXXX1 are also encouraged to provide these guarantees.|Z-IOCreate y from create and release action.Note, resourceA doesn't open resource itself, resource is created when you use with / with'.}Z-IOCreate y from create and release action.]This function is useful when you want to add some initialization and clean up action inside y monad.~Z-IOTCreate a new resource and run some computation, resource is guarantee to be closed.Be care don't leak the resource through computation return value, because after the computation finishes, the resource is closed already.Z-IOTCreate a new resource and run some computation, resource is guarantee to be closed.The difference from with is that the computation will receive an extra close action, which can be used to close the resource early before the whole computation finished, the close action can be called multiple times, only the first call will clean up the resource.Z-IO&Initialize a resource pool with given yULike other initXXX functions, this function won't open a resource pool until you use ~[. And this resource pool follow the same resource management pattern like other resources.Z-IOGet a resource pool's u7This function is useful when debug, under load lots of x may indicate contention on resources, i.e. the limit on maximum number of resources can be opened should be adjusted to a higher number. On the otherhand, lots of w0 may indicate there're too much free resources.Z-IO8Obtain the pooled resource inside a given resource pool.You shouldn't use ~3 with this resource after you closed the pool, an  will be thrown.Z-IO)maximum number of resources can be openedZ-IOKamount of time after which an unused resource can be released (in seconds).tuvwxyz{|}~yz{|}~tuvwxBuffered IO interface(c) Dong Han, 2017-2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqGL!Z-IOAType alias for output stream, contain a write & a flush function.Z-IOType alias for input stream,  indicate EOF.Z-IO+Output device with buffer, NOT THREAD SAFE!A d should not be used in multiple threads, there's no locking mechanism to protect buffering state.A * device should only be used with a single , If multiple  s are opened on a same ( device, the output will be interleaved.Z-IO*Input device with buffer, NOT THREAD SAFE!A d should not be used in multiple threads, there's no locking mechanism to protect buffering state.A * device should only be used with a single , If multiple  s are opened on a same $ device, the behaviour is undefined.Z-IO Output device should not return until all data are written (may not necessarily flushed to hardware, that should be done in device specific way).Z-IO Input device should return 0 on EOF.Z-IOOpen a new buffered input with  as buffer size.Z-IO Open a new buffered output with  as buffer size.Z-IO8Open a new buffered output with given buffer size, e.g. .Z-IO7Open a new buffered input with given buffer size, e.g. .Z-IORequest bytes from .$The buffering logic is quite simple:If we have pushed back bytes, directly return it, otherwise we read using buffer size. If we read N bytes, and N is larger than half of the buffer size, then we freeze buffer and return, otherwise we copy buffer into result and reuse buffer afterward.Z-IORead exactly N bytesDIf EOF reached before N bytes read, trailing bytes will be returned.Z-IORead exactly N bytes&If EOF reached before N bytes read, a  will be thrownZ-IORead all chunks from a .,This function will loop read until meet EOF( device return .), Useful for reading small file into memory.Z-IORead all chunks from a , and concat chunks together.,This function will loop read until meet EOF( device return .), Useful for reading small file into memory.Z-IO*Push bytes back into buffer(if not empty).Z-IORead buffer and parse with Parser.yThis function will continuously draw data from input before parsing finish. Unconsumed bytes will be returned to buffer.BEither during parsing or before parsing, reach EOF will result in .Z-IOGRead until reach a magic bytes, return bytes(including the magic bytes)GIf EOF is reached before meet a magic byte, partial bytes are returned.Z-IOGRead until reach a magic bytes, return bytes(including the magic bytes).If EOF is reached before meet a magic byte, a  will be thrown.Z-IORead to a linefeed ('\n' or '\r\n' ), return Bytes before it.FReturn bytes don't include linefeed, empty bytes indicate empty line, T indicate EOF. If EOF is reached before meet a line feed, partial line is returned.Z-IORead to a linefeed ('\n' or '\r\n' ), return Bytes before it.FReturn bytes don't include linefeed, empty bytes indicate empty line, : indicate EOF. If EOF reached before meet a line feed, a  will be thrown.Z-IOWrite  into buffered handle.uIf buffer is empty and bytes are larger than half of buffer, directly write bytes, otherwise copy bytes to buffer.rIf buffer is not empty, then copy bytes to buffer if it can hold, otherwise write buffer first, then try again.Z-IODirectly write  into buffered handle.Run A with buffer if it can hold, write to device when buffer is full.Z-IO<Flush the buffer into output device(if buffer is not empty).Z-IOTurn a  into , map EOF to Nothing.Z-IOTurn a  into .Z-IOSource a list streamly.Z-IOEConnect two streams, after first reach EOF, draw element from second.Z-IO#Read all stream elements to a list.Z-IORead buffer and parse with Parser.yThis function will continuously draw data from input before parsing finish. Unconsumed bytes will be returned to buffer.Return $ if reach EOF before parsing, throw  if parsing fail.Z-IOLConnect list of streams, after one stream reach EOF, draw element from next.Z-IOZip two streams into one.Z-IOGLoop read stream and write to output, when input ends flush the output.Z-IOOutput buffer sizeZ-IOInput buffer sizeZ-IOstream to write)) The zlib(c) Dong Han, 2017-2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkq^Z-IOThe  specifies how much memory should be allocated for the internal compression state. 1 uses minimum memory but is slow and reduces compression ratio; 9 uses maximum memory for optimal speed. The default value is 8.Z-IOThe  is the base two logarithm of the maximum window size (the size of the history buffer). It should be in the range 8..15 for this version of the library. The  value is 15. Decompressing windowBits must be greater than or equal to the compressing windowBits. If a compressed stream with a larger window size is given as input, decompress will throw  ZDataError windowBits can also be 8.. 15 for raw inflate. In this case, -windowBits determines the window size. inflate() will then process raw deflate data, not looking for a zlib or gzip header, not generating a check value, and not looking for any check values for comparison at the end of the stream. windowBits can also be greater than 15 for optional gzip decoding. Add 32 to windowBits to enable zlib and gzip decoding with automatic header detection, or add 16 to decode only the gzip format.Z-IO*Compress all the data written to a output.Z-IOCompress some bytes.Z-IODecompress bytes from source.Z-IODecompress some bytes. libuv operations(c) Winterland, 2017-2018BSDdrkoster@qq.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqNZ-IO%Data type for resource usage results.:Members marked with (X) are unsupported on Windows. See  6https://man7.org/linux/man-pages/man2/getrusage.2.html getrusage(2) for supported fields on UnixZ-IO#user CPU time used, in microsecondsZ-IO%system CPU time used, in microsecondsZ-IOmaximum resident set sizeZ-IOintegral shared memory size (X)Z-IOintegral unshared data size (X)Z-IO integral unshared stack size (X)Z-IO$page reclaims (soft page faults) (X)Z-IOpage faults (hard page faults)Z-IO swaps (X)Z-IOblock input operationsZ-IOblock output operationsZ-IOIPC messages sent (X)Z-IOIPC messages received (X)Z-IOsignals received (X)Z-IOvoluntary context switches (X)Z-IO involuntary context switches (X)Z-IOYData type for storing times. typedef struct { long tv_sec; long tv_usec; } uv_timeval_t;Z-IOredirect process std stream to devnullZ-IOcreate a new std streamZ-IO2pass an existing FD to child process as std streamZ-IO,Path pointing to the program to be executed.Z-IOCommand line arguments. On Windows this uses CreateProcess which concatenates the arguments into a string this can cause some strange errors. See the .Z-IOAOptional environment(otherwise inherit from the current process).Z-IO-Current working directory for the subprocess.Z-IO,Various flags that control how spawn behavesZ-IOHThis happens only when the appropriate bits are set in the flags fields.Z-IOHThis happens only when the appropriate bits are set in the flags fields. Z-IORSpecifying how (stdin, stdout, stderr) should be passed/created to the child, see Z-IO[On Windows the flags parameter can be specified to control how the symlink will be created:,: indicates that path points to a directory.<: request that the symlink is created using junction points.Z-IOFlags control copying.: If present, uv_fs_copyfile() will fail with UV_EEXIST if the destination path already exists. The default behavior is to overwrite the destination if it exists.: If present, uv_fs_copyfile() will attempt to create a copy-on-write reflink. If the underlying platform does not support copy-on-write, then a fallback copy mechanism is used.: If present, uv_fs_copyfile() will attempt to create a copy-on-write reflink. If the underlying platform does not support copy-on-write, or an error occurs while attempting to use copy-on-write, then an error is returned.8Z-IOTerminal mode.When in UV_TTY_MODE_RAW mode, input is always available character-by-character, not including modifiers. Additionally, all special processing of characters by the terminal is disabled, including echoing input characters. Note that CTRL+C will no longer cause a SIGINT when in this mode.@Z-IO.UVSlotUnsafe wrap a slot which may not have a MVarC in blocking table, i.e. the blocking table need to be resized.Z-IO2Just pass null pointer as SocketAddr to disconnectZ-IOuv_run with safe FFI.Z-IOuv_run with usafe FFI.Z-IO?Hide the subprocess GUI window that would normally be created. RThis option is only meaningful on Windows systems. On Unix it is silently ignored.Z-IOCHide the subprocess console window that would normally be created. RThis option is only meaningful on Windows systems. On Unix it is silently ignored.Z-IO:Hide the subprocess window that would normally be created.RThis option is only meaningful on Windows systems. On Unix it is silently ignored.Z-IO,Spawn the child process in a detached state xThis will make it a process group leader, and will effectively enable the child to keep running after the parent exits.Z-IODo not wrap any arguments in quotes, or perform any other escaping, when converting the argument list into a command line string. RThis option is only meaningful on Windows systems. On Unix it is silently ignored.Z-IOSet the child process' user id.WThis is not supported on Windows, uv_spawn() will fail and set the error to UV_ENOTSUP.Z-IOSet the child process' user id.WThis is not supported on Windows, uv_spawn() will fail and set the error to UV_ENOTSUP.Z-IO$Open the file for write-only access.Z-IOIf the file exists and is a regular file, and the file is opened successfully for write access, its length shall be truncated to zero.Z-IODThe file is temporary and should not be flushed to disk if possible.Note  o_TEMPORARY" is only supported on Windows via FILE_ATTRIBUTE_TEMPORARY.Z-IOyThe file is opened for synchronous IO. Write operations will complete once all data and all metadata are flushed to disk.Note o_SYNC is supported on Windows via FILE_FLAG_WRITE_THROUGH.Z-IODOpen the symbolic link itself rather than the resource it points to.Z-IODThe file is temporary and should not be flushed to disk if possible.Note  o_SHORT_LIVED" is only supported on Windows via FILE_ATTRIBUTE_TEMPORARY.Z-IOvAccess is intended to be sequential from beginning to end. The system can use this as a hint to optimize file caching.Note  o_SEQUENTIAL" is only supported on Windows via FILE_FLAG_SEQUENTIAL_SCAN.Z-IO$Open the file for read-write access.Z-IO#Open the file for read-only access.Z-IO\Access is intended to be random. The system can use this as a hint to optimize file caching.Note o_RANDOM" is only supported on Windows via FILE_FLAG_RANDOM_ACCESS.Z-IONOpen the file in nonblocking mode if possible. (Definitely not useful in Z-IO)Note  o_NONBLOCKA is not supported on Windows. (Not useful on regular file anyway)Z-IO.If the path is a symbolic link, fail the open.Note  o_NOFOLLOW is not supported on Windows.Z-IOIf the path identifies a terminal device, opening the path will not cause that terminal to become the controlling terminal for the process (if the process does not already have one). (Not sure if this flag is useful)Note o_NOCTTY is not supported on Windows. Z-IO9Do not update the file access time when the file is read.Note  o_NOATIME is not supported on Windows. Z-IO$Atomically obtain an exclusive lock.~Note UV_FS_O_EXLOCK is only supported on macOS and Windows. (libuv: Changed in version 1.17.0: support is added for Windows.) Z-IOIf the o_CREAT8 flag is set and the file already exists, fail the open.!Note In general, the behavior of o_EXCL$ is undefined if it is used without o_CREAT4. There is one exception: on Linux 2.6 and later, o_EXCL can be used without o_CREAT if pathname refers to a block device. If the block device is in use by the system (e.g., mounted), the open will fail with the error EBUSY. Z-IOThe file is opened for synchronous IO. Write operations will complete once all data and a minimum of metadata are flushed to disk.Note o_DSYNC is supported on Windows via FILE_FLAG_WRITE_THROUGH. Z-IOKIf the path is not a directory, fail the open. (Not useful on regular file)Note  o_DIRECTORY is not supported on Windows.Z-IOFile IO is done directly to and from user-space buffers, which must be aligned. Buffer size and address should be a multiple of the physical sector size of the block device, (DO NOT USE WITH Z-IO's  BufferedIO)Z-IO1The file is created if it does not already exist.Z-IOkThe file is opened in append mode. Before each write, the file offset is positioned at the end of the file.Z-IO4Default mode for open, 0o666(readable and writable).Z-IO$00001 others have execute permissionZ-IO"00002 others have write permissionZ-IO!00004 others have read permissionZ-IO400007 others have read, write and execute permissionZ-IO"00010 group has execute permissionZ-IO 00020 group has write permissionZ-IO00040 group has read permissionZ-IO200070 group has read, write and execute permissionZ-IO!00100 user has execute permissionZ-IO00200 user has write permissionZ-IO00400 user has read permissionZ-IO>00700 user (file owner) has read, write and execute permission/Z-IO-Peek loop data pointer from uv loop pointer.Z-IO uv_check_tZ-IO uv_stream_t^     '&%$#"! ()+*,43210/.-56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789^C@AB?+*>=,-.<)('/;01:&%9$#"!8 76     5,43210/.-23~()+*'&%$#"! 45}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYX     6WVUTSR78QPONMLKJIHG9FED  Filesystem IO(c) Dong Han, 2017~2019BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqK*%Z-IOFile bundled with offset.Reading or writing using  / / instance will automatically increase offset. - and its operations are NOT thread safe, use MVar  in multiple threads.Z-IO- and its operations are NOT thread safe, use MVar  in multiple threads~libuv implements read and write method with both implict and explict offset capable. Implict offset interface is provided by  / 5 instances. Explict offset interface is provided by  / .Z-IOReturn File fd.Z-IOIf fd is -1 (closed), throw  ECLOSED.Z-IORead file with given offset,Read length may be smaller than buffer size.Z-IOWrite buffer to file4This function will loop until all bytes are written.Z-IO$Create a file offset bundle from an .Z-IOGet current offset.Z-IOChange current offset.Z-IO init a file y, which open a file when used.\Resource closing is thread safe, on some versions of OSX, repeatly open and close same file y0 may result in shared memory object error, use  to avoid that.Z-IO)Quickly open a file and read its content.Z-IO6Quickly open a file and read its content as UTF8 text.Z-IO+Quickly open a file and write some content.Z-IO8Quickly open a file and write some content as UTF8 text.Z-IOEquivalent to  http://linux.die.net/man/2/mkdirmkdir(2).2Note mode is currently not implemented on Windows.Z-IOEquivalent to  !http://linux.die.net/man/2/unlink unlink(2).Z-IOEquivalent to mkdtemp"http://linux.die.net/man/3/mkdtemp?Creates a temporary directory in the most secure manner possible. There are no race conditions in the directory s creation. The directory is readable, writable, and searchable only by the creating user ID. The user of mkdtemp() is responsible for deleting the temporary directory and its contents when done with it.^Note: the argument is the prefix of the temporary directory, so no need to add XXXXXX ending.Z-IOEquivalent to  http://linux.die.net/man/2/rmdirrmdir(2).Z-IOEquivalent to  "http://linux.die.net/man/3/scandir scandir(3).ONote Unlike scandir(3), this function does not return the .  and ..  entries.Note On Linux, getting the type of an entry is only supported by some file systems (btrfs, ext2, ext3 and ext4 at the time of this writing), check the  #http://linux.die.net/man/2/getdents getdents(2) man page.Z-IOEquivalent to http://linux.die.net/man/2/statstat(2)Z-IOEquivalent to http://linux.die.net/man/2/lstatlstat(2)Z-IOEquivalent to http://linux.die.net/man/2/fstatfstat(2)Z-IOEquivalent to  !http://linux.die.net/man/2/rename rename(2).Note On Windows if this function fails with UV_EBUSY, UV_EPERM or UV_EACCES, it will retry to rename the file up to four times with 250ms wait between attempts before giving up. If both path and new_path are existing directories this function will work only if target directory is empty.Z-IOEquivalent to  http://linux.die.net/man/2/fsyncfsync(2).Z-IOEquivalent to  $http://linux.die.net/man/2/fdatasync fdatasync(2).Z-IOEquivalent to  $http://linux.die.net/man/2/ftruncate ftruncate(2).Z-IO$Copies a file from path to new_path.Warning: If the destination path is created, but an error occurs while copying the data, then the destination path is removed. There is a brief window of time between closing and removing the file where another process could access the file.Z-IOEquivalent to  !http://linux.die.net/man/2/access access(2) on Unix."Windows uses GetFileAttributesW().Z-IOEquivalent to  http://linux.die.net/man/2/chmodchmod(2).Z-IOEquivalent to  !http://linux.die.net/man/2/fchmod fchmod(2).Z-IOEquivalent to  http://linux.die.net/man/2/utimeutime(2). libuv choose M type due to cross platform concerns, we only provide micro-second precision.Z-IOEquivalent to  4https://man7.org/linux/man-pages/man3/futimes.3.html futime(3).Same precision notes with .Z-IOEquivalent to  4https://man7.org/linux/man-pages/man3/lutimes.3.html lutime(3).Same precision notes with .Z-IOEquivalent to  http://linux.die.net/man/2/linklink(2).Z-IOEquivalent to  "http://linux.die.net/man/2/symlink symlink(2).b| Note On Windows the flags parameter can be specified to control how the symlink will be created.,: indicates that path points to a directory.<: request that the symlink is created using junction points.+On other platforms these flags are ignored.Z-IOEquivalent to  #http://linux.die.net/man/2/readlink readlink(2).Z-IOEquivalent to  #http://linux.die.net/man/3/realpath realpath(3) on Unix. Windows uses  Ohttps://msdn.microsoft.com/en-us/library/windows/desktop/aa364962(v=vs.85).aspxGetFinalPathNameByHandle.cWarning This function has certain platform-specific caveats that were discovered when used in Node.macOS and other BSDs: this function will fail with UV_ELOOP if more than 32 symlinks are found while resolving the given path. This limit is hardcoded and cannot be sidestepped.kWindows: while this function works in the common case, there are a number of corner cases where it doesn t:pPaths in ramdisk volumes created by tools which sidestep the Volume Manager (such as ImDisk) cannot be resolved.-Inconsistent casing when using drive letters.&Resolved path bypasses subst d drives.While this function can still be used, it s not recommended if scenarios such as the above need to be supported. The background story and some more details on these issues can be checked  *https://github.com/nodejs/node/issues/7726here.uNote This function is not implemented on Windows XP and Windows Server 2003. On these systems, UV_ENOSYS is returned.Z-IOthe fileZ-IO closed flagZ-IObufferZ-IO buffer sizeZ-IO2file offset, pass -1 to use default(system) offsetZ-IO read lengthZ-IObufferZ-IO buffer sizeZ-IO2file offset, pass -1 to use default(system) offsetZ-IOthe file we're readingZ-IOinitial offsetZ-IOOpening flags, e.g.  .|. Z-IOXSets the file mode (permission and sticky bits), but only if the file was created, see .Z-IOatime, i.e. access timeZ-IOmtime, i.e. modify timeZ-IOatime, i.e. access timeZ-IOmtime, i.e. modify timet !"#$%&'()*+,-./0123467    t,-./01234 !"#$%&'()*+76     IO manager based on libuv(c) Dong Han, 2017-2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkq Z-IOGet  runing on the same capability.Z-IOGet % from blocking table with given slot.Z-IO@Poke a prepared buffer and size into loop data under given slot.(NOTE, this action is not protected with h for effcient reason, you should merge this action with other uv action and put them together inside a  or 'withUVManager\''. for example: k ... withUVManager' uvm $ do pokeBufferTable uvm slot buf len uvReadStart handle ... Z-IOFLock an uv mananger, so that we can safely mutate its uv_loop's state.dlibuv is not thread safe, use this function to perform any action which will mutate uv_loop's state.Z-IOFLock an uv mananger, so that we can safely mutate its uv_loop's state.iSome action did not request uv_loop pointer explicitly, but will mutate uv_loop underhood, for example:  uv_read_start<. These actions have to be protected by locking the uv_loop.HIn fact most of the libuv's functions are not thread safe, so watch out!Z-IOStart the uv loopZ-IORun a libuv FFI to get a @ (which may exceed block table size), resize the block table in that case, so that the returned slot always has an accompanying  in block table.$Always use this function to turn an @ into CI, so that the block table size synchronize with libuv side's slot table.Z-IO>Cancel uv async function (actions which can be cancelled with  uv_cancelV) with best effort, if the action is already performed, run an extra clean up action.Z-IO Exception safe uv request helperrThis helper will run a libuv's async function, which will return a libuv side's slot, then we will accommodate a " in block table and wait on that ], until the async function finished or an exception is received, in later case we will call : to cancel the on-going async function with best efforts,Z-IO Same with  but disgard the result.Z-IO Same with ) but apply an convert function to result.The convert function have all access to the returned value including negative ones, it's convert funtions's responsiblity to throw an exception if appropriate.Z-IO Same with , but will also run an extra cleanup function if async exception hit this thread but the async action is already successfully performed, e.g. release result memory.Z-IO1Fork a new GHC thread with active load-balancing.Using libuv based IO solution has a disadvantage that file handlers are bound to certain uv_loop, thus certain uv mananger/capability. Worker threads that migrate to other capability will lead contention since various APIs here is protected by manager's lock, this makes GHC's work-stealing strategy unsuitable for certain workload, such as a webserver. we solve this problem with simple round-robin load-balancing: forkBa will automatically distribute new threads to all capabilities in round-robin manner. Thus its name forkBa(lance).Z-IO uv managerZ-IOuv slotZ-IObuffer pointerZ-IO buffer lengthZ-IOconvert function   Standard Streams and TTY devices(c) Dong Han, 2018~2019BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkq\ Z-IO!Standard input and output streamsFWe support both regular file and TTY based streams, when initialized UN is called to decide which type of devices are connected to standard streams.Note v is not thread safe, you shouldn't use them without lock. For the same reason you shouldn't use stderr directly, use  module instead.Z-IOThe global stdin stream.Z-IOThe global stdout stream.'| If you want to write logs, don't use  directly, use  instead.Z-IOThe global stderr stream.'| If you want to write logs, don't use  directly, use  instead.Z-IO,A global buffered stdin stream protected by .Z-IO-A global buffered stdout stream protected by .'| If you want to write logs, don't use  directly, use  instead.Z-IO-A global buffered stderr stream protected by .'| If you want to write logs, don't use  directly, use  instead.Z-IO;Change terminal's mode if stdin is connected to a terminal.Z-IObGet terminal's output window size in (width, height) format, return (-1, -1) if stdout is a file.Z-IOPrint a  and flush to stdout.Z-IOPrint a  and flush to stdout.Z-IOPrint a & and flush to stdout, with a linefeed.Z-IORead a line from stdinThis function will throw ECLOSEDN when meet EOF, which may cause trouble if stdin is connected to a file, use  instead. 8  8  High performance logger(c) Dong Han, 2017-2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqZ-IO%Minimal flush interval, see Notes on Z-IO"Buffer size to build each log/lineZ-IOSet to  to filter debug logsZ-IOSet to , to disable auto data/time string prependingZ-IOSet to  to enable source location lineZ-IOpush log into bufferZ-IO&flush logger's buffer to output deviceZ-IOthrottled flush, e.g. use q from Z.IO.LowResTimerZ-IO/A IO action return a formatted date/time stringZ-IOA default logger config withdebug ON0.1s minimal flush intervalline buffer size 128 bytesshow debug Trueshow timestamp Truedon't show source locationbuffer size equals to .Z-IO&A default timestamp cache with format %Y-%m-%dT%H:%M:%S%ZSThe timestamp will updated in 0.1s granularity to ensure a seconds level precision.Z-IO(Use this function to implement a simple  based concurrent logger. fbList <- newIORef [] let flush = flushLog buffered bList .. return $ Logger (pushLog bList) flush ... Z-IOMake a new simple logger.Z-IOA default log formatter ! [DEBUG][2020-10-09T07:44:14UTC][ interactive:7:1]This a debug messageZ-IODDefault stack formatter which fetch the logging source and location.Z-IOChange the global logger.Z-IOGet the global logger.Z-IOManually flush stderr logger.Z-IO'Flush stderr logger when program exits.Z-IOdata/time stringZ-IO log levelZ-IO log contentZ-IOcall stack traceZ-IOshow call stack info?Z-IO log levelZ-IOflush immediately?Z-IO log content Z-IO log levelZ-IOflush immediately?Z-IO log content!     !     UDP servers and clients(c) Dong Han, 2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkq݌Z-IOReceiving buffering config.Z-IO"maximum size of a received messageZ-IOhow many messages we want to receive per uv loop, inside each uv_run, we do batch receiving, increase this number can improve receiving performance, at the cost of memory and potential GHC thread starving.Z-IOWrapper for a connected .Z-IO UDP options.Though technically message length field in the UDP header is a max of 65535, but large packets could be more likely dropped by routers, usually a packet(IPV4) with a payload <= 508 bytes is considered safe.Z-IOmaximum size of sending bufferZ-IOjdo we want bind a local address before receiving & sending? set to Nothing to let OS pick a random one.Z-IOUDP socket client.:UDP is not a sequential protocol, thus not an instance of 'Input/Output'Y. Message are received or sent individually, UDP socket client is NOT thread safe! Use   in multiple threads.Z-IO UDPConfig 512 NothingZ-IOInitialize a UDP socket.Z-IO!Get the local IP and port of the .Z-IOAssociate the UDP handle to a remote address and port, so every message sent by this handle is automatically sent to that destinationZ-IO9Disconnect the UDP handle from a remote address and port.Z-IOGet the remote IP and port on .Z-IO(Send a UDP message with a connected UDP. WARNING: A  with errno + will be thrown if message is larger than  sendMsgSize.Z-IO%Send a UDP message to target address. WARNING: A  with errno + will be thrown if message is larger than  sendMsgSize. Z-IOOSet IP multicast loop flag. Makes multicast packets loop back to local sockets.!Z-IOSet the multicast ttl."Z-IO7Set the multicast interface to send or receive data on.#Z-IOSet broadcast on or off.$Z-IOSet the time to live.%Z-IO%Set membership for a multicast group.&Z-IO5Set membership for a source-specific multicast group.'Z-IO UDPRecvConfig 512 6(Z-IORecv UDP message within a loopALoop receiving can be faster since it can reuse receiving buffer.)Z-IOIRecv messages from UDP socket, return source address if available, and a J to indicate if the message is partial (larger than receive buffer size).$Z-IO1 ~ 255%Z-IO(Multicast address to set membership for.Z-IOInterface address.Z-IOUV_JOIN_GROUP | UV_LEAVE_GROUP&Z-IO(Multicast address to set membership for.Z-IOInterface address.Z-IOSource address.Z-IOUV_JOIN_GROUP | UV_LEAVE_GROUPZ-IO uv_check_t#9:"#$%& !"#$%&'()#'()%& !"#$9$#":%&Filesystem IO using threadpool(c) Dong Han, 2017~2019BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqE%/Z-IOFile bundled with offset.Reading or writing using  / / instance will automatically increase offset. /- and its operations are NOT thread safe, use MVar / in multiple threads.0Z-IO0- and its operations are NOT thread safe, use MVar 0 in multiple threads.'Note this is a differet data type from Z.IO.FileSystem 's one, the  and , instance use thread pool version functions.~libuv implements read and write method with both implict and explict offset capable. Implict offset interface is provided by  / 5 instances. Explict offset interface is provided by 2 / 3.1Z-IOReturn FileT fd.Z-IOIf fd is -1 (closed), throw  ECLOSED.2Z-IORead file with given offset,Read length may be smaller than buffer size.3Z-IOWrite buffer to file4This function will loop until all bytes are written.4Z-IO$Create a file offset bundle from an File.5Z-IOGet current offset.6Z-IOChange current offset.7Z-IO init a file y, which open a file when used.8Resource closing will wait for the referencing counter goes down to zero (no reading or writing is in process), which can be a problem if you are using multiple readers or writers in multiple threads. In that case you have to stop all reading or writing thread if you don't want to block the resource thread.8Z-IO)Quickly open a file and read its content.9Z-IO6Quickly open a file and read its content as UTF8 text.:Z-IO+Quickly open a file and write some content.;Z-IO8Quickly open a file and write some content as UTF8 text.<Z-IOEquivalent to  http://linux.die.net/man/2/mkdirmkdir(2).2Note mode is currently not implemented on Windows.=Z-IOEquivalent to  !http://linux.die.net/man/2/unlink unlink(2).>Z-IOEquivalent to mkdtemp"http://linux.die.net/man/3/mkdtemp?Creates a temporary directory in the most secure manner possible. There are no race conditions in the directory s creation. The directory is readable, writable, and searchable only by the creating user ID. The user of mkdtemp() is responsible for deleting the temporary directory and its contents when done with it.^Note: the argument is the prefix of the temporary directory, so no need to add XXXXXX ending.?Z-IOEquivalent to  http://linux.die.net/man/2/rmdirrmdir(2).@Z-IOEquivalent to  "http://linux.die.net/man/3/scandir scandir(3).ONote Unlike scandir(3), this function does not return the .  and ..  entries.Note On Linux, getting the type of an entry is only supported by some file systems (btrfs, ext2, ext3 and ext4 at the time of this writing), check the  #http://linux.die.net/man/2/getdents getdents(2) man page.AZ-IOEquivalent to http://linux.die.net/man/2/statstat(2)BZ-IOEquivalent to http://linux.die.net/man/2/lstatlstat(2)CZ-IOEquivalent to http://linux.die.net/man/2/fstatfstat(2)DZ-IOEquivalent to  !http://linux.die.net/man/2/rename rename(2).Note On Windows if this function fails with UV_EBUSY, UV_EPERM or UV_EACCES, it will retry to rename the file up to four times with 250ms wait between attempts before giving up. If both path and new_path are existing directories this function will work only if target directory is empty.EZ-IOEquivalent to  http://linux.die.net/man/2/fsyncfsync(2).FZ-IOEquivalent to  $http://linux.die.net/man/2/fdatasync fdatasync(2).GZ-IOEquivalent to  $http://linux.die.net/man/2/ftruncate ftruncate(2).HZ-IO$Copies a file from path to new_path.Warning: If the destination path is created, but an error occurs while copying the data, then the destination path is removed. There is a brief window of time between closing and removing the file where another process could access the file.IZ-IOEquivalent to  !http://linux.die.net/man/2/access access(2)- on Unix. Windows uses GetFileAttributesW().JZ-IOEquivalent to  http://linux.die.net/man/2/chmodchmod(2).KZ-IOEquivalent to  !http://linux.die.net/man/2/fchmod fchmod(2).LZ-IOEquivalent to  http://linux.die.net/man/2/utimeutime(2). libuv choose M type due to cross platform concerns, we only provide micro-second precision.MZ-IOEquivalent to  4https://man7.org/linux/man-pages/man3/futimes.3.html futime(3).Same precision notes with L.NZ-IOEquivalent to  4https://man7.org/linux/man-pages/man3/lutimes.3.html lutime(3).Same precision notes with L.OZ-IOEquivalent to  http://linux.die.net/man/2/linklink(2).PZ-IOEquivalent to  "http://linux.die.net/man/2/symlink symlink(2).b| Note On Windows the flags parameter can be specified to control how the symlink will be created.,: indicates that path points to a directory.<: request that the symlink is created using junction points.+On other platforms these flags are ignored.QZ-IOEquivalent to  #http://linux.die.net/man/2/readlink readlink(2).RZ-IOEquivalent to  #http://linux.die.net/man/3/realpath realpath(3) on Unix. Windows uses  Ohttps://msdn.microsoft.com/en-us/library/windows/desktop/aa364962(v=vs.85).aspxGetFinalPathNameByHandle.cWarning This function has certain platform-specific caveats that were discovered when used in Node.macOS and other BSDs: this function will fail with UV_ELOOP if more than 32 symlinks are found while resolving the given path. This limit is hardcoded and cannot be sidestepped.kWindows: while this function works in the common case, there are a number of corner cases where it doesn t:pPaths in ramdisk volumes created by tools which sidestep the Volume Manager (such as ImDisk) cannot be resolved.-Inconsistent casing when using drive letters.&Resolved path bypasses subst d drives.While this function can still be used, it s not recommended if scenarios such as the above need to be supported. The background story and some more details on these issues can be checked  *https://github.com/nodejs/node/issues/7726here.uNote This function is not implemented on Windows XP and Windows Server 2003. On these systems, UV_ENOSYS is returned.Z-IOthe fileZ-IO closed flag2Z-IObufferZ-IO buffer sizeZ-IO2file offset, pass -1 to use default(system) offsetZ-IO read length3Z-IObufferZ-IO buffer sizeZ-IO2file offset, pass -1 to use default(system) offset4Z-IOthe file we're readingZ-IOinitial offset7Z-IOOpening flags, e.g.  .|. Z-IOXSets the file mode (permission and sticky bits), but only if the file was created, see .LZ-IOatime, i.e. access timeZ-IOmtime, i.e. modify timeNZ-IOatime, i.e. access timeZ-IOmtime, i.e. modify timet !"#$%&'()*+,-./0123467    /0123456789:;<=>?@ABCDEFGHIJKLMNOPQRt0723189:;/456<=>?,-./01234@ !"#$%&'()*+ABCDEFGHIJKLMNOPQR76    =Miscellaneous functions(environment variables, metrics, etc.)(c) Dong Han, 2020BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqj#WZ-IO Computation WV returns a list of the program's command line arguments (including the program path).This is different from base's > since result includes the program path(more like C's *argv).XZ-IO#Retrieves the environment variable.*Warning: This function is not thread safe.YZ-IO5Retrieves the environment variable specified by name.*Warning: This function is not thread safe.ZZ-IO<Retrieves the environment variable specified by name, throw  if not exists.*Warning: This function is not thread safe.[Z-IOICreates or updates the environment variable specified by name with value.*Warning: This function is not thread safe.\Z-IOWDeletes the environment variable specified by name if such environment variable exists.*Warning: This function is not thread safe.]Z-IO9Gets the resident set size (RSS) for the current process.^Z-IOGets the current system uptime._Z-IO.Returns the current high-resolution real time.This is expressed in nanoseconds. It is relative to an arbitrary time in the past. It is not related to the time of day and therefore not subject to clock drift. The primary use is for measuring performance between intervals.`Z-IO9Gets the resource usage measures for the current process.XOn Windows not all fields are set, the unsupported fields are filled with zeroes. See  for more details.aZ-IOReturns the current process ID.bZ-IOReturns the parent process ID.cZ-IO1Returns the hostname as a null-terminated string.dZ-IOcFill buf with exactly buflen cryptographically strong random bytes acquired from the system CSPRNG.uThe function may block indefinitely when not enough entropy is available, don't use it to get long random sequences.eZ-IOcFill buf with exactly buflen cryptographically strong random bytes acquired from the system CSPRNG.The function run dD in libuv's threadpool, suitable for get long random byte sequences.9WXYZ[\]^_`abcdeWXYZ[\`]^_abc9deIO Umbrella module(c) Dong Han, 2017BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqm  ! #"%$'&)(*+,-/.1032547698;:@?>=<DEFGHIJKLPONMQTRSYXWV`_^]\[ZabUtuvwxyz{|}~8 9     WXYZ[\]^_`abcdeIO manager based on libuv(c) Dong Han, 2017-2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkq fZ-IOA haskell data type wrap an  uv_stream_t insidef# DO NOT provide thread safety! Use fC concurrently in multiple threads will lead to undefined behavior.lZ-IO?Safely lock an uv manager and perform uv_handle initialization.2Initialization an UV stream usually take two step:-allocate an uv_stream struct with proper sizeXlock a particular uv_loop from a uv manager, and perform custom initialization, such as  uv_tcp_init.And this is what l do, all you need to do is to provide the manager you want to hook the handle onto(usually the one on the same capability, i.e. the one obtained by ]), and provide a custom initialization function (which should throw an exception if failed).mZ-IOManually close a uv stream.nZ-IO Get stream fdoZ-IOWrite "hello world" to a f.pZ-IOEcho whatever received bytes. fghijklmnop lfghijknmopTCP servers and clients(c) Dong Han, 2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqEtZ-IOA TCP server configurationvZ-IOlistening addresswZ-IO=listening socket's backlog size, should be large enough(>128)xZ-IOif we want to use  TCP_NODELAYyZ-IO+set keepalive delay for worker socket, see zZ-IOA TCP client configuration|Z-IO*assign a local address, or let OS pick one}Z-IOremote target address~Z-IOif we want to use  TCP_NODELAYZ-IO+set keepalive delay for client socket, see Z-IODefault config, connect to localhost:8888.Z-IOinit a TCP client y%, which open a new connect when used.Z-IO.A default hello world server on localhost:8888 Test it with =main = startTCPServer defaultTCPServerConfig helloWorldWorker or 7main = startTCPServer defaultTCPServerConfig echoWorker , now try nc -v 127.0.0.1 8888Z-IOStart a server-Fork new worker thread upon a new connection.Z-IOEnable or disable  TCP_NODELAY#, which disables Nagle s algorithm.Z-IO5Get the current address to which the handle is bound.Z-IO4Get the address of the peer connected to the handle.Z-IOworker which will get an accepted TCP stream and run in a seperated haskell thread, will be closed upon exception or worker finishes.foptuvwxyz{|}~z{|}~ftuvwxyop*Named pipe/Unix domain servers and clients(c) Dong Han, 2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkq Z-IOA IPC server configurationZ-IO*listening path (Unix) or a name (Windows).Z-IO;listening pipe's backlog size, should be large enough(>128)Z-IOA IPC client configurationZ-IOJbind to a local file path (Unix) or name (Windows), won't bind if set to .Z-IO'target path (Unix) or a name (Windows).Z-IO#Default config, connect to "./ipc".Z-IOinit a IPC client y%, which open a new connect when used.Z-IO A default hello world server on ./ipc Test it with ,main = startIPCServer defaultIPCServerConfigZ-IOStart a server-Fork new worker thread upon a new connection.Z-IOworker which get an accepted IPC stream, run in a seperated haskell thread, will be closed upon exception or worker finishes.fopfopProcess utilities(c) Dong Han, 2018~2019BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqɗ Z-IO Process stateZ-IODefault process options, start "./main"0 with no arguments, redirect all std streams to devnull.Z-IO'Wait until process exit and return the C.Z-IO Get process  if process is running.Z-IOSend signals to process.Z-IOResource spawn processes.=Return a resource spawn processes, when initiated return the (stdin, stdout, stderr, pstate), tuple, std streams are created when pass  option, otherwise will be , pstate will be updated to & automatically when the process exits.|A cleanup thread will be started when you finish using the process resource, to close any std stream created during spawn. e initProcess defaultProcessOptions{ processFile="your program" , processStdStreams = (ProcessCreate, ProcessCreate, ProcessCreate) } $ (stdin, stdout, stderr, pstate) -> do ... -- read or write from child process's std stream, will clean up automatically waitProcessExit pstate -- wait for process exit on current thread. Z-IO"Spawn a processe with given input.NChild process's stdout and stderr output are collected, return with exit code.Z-IO/Spawn a processe with given UTF8 textual input.\Child process's stdout and stderr output are collected as UTF8 bytes, return with exit code.Z-IOSpawn a new threadMPlease manually close child process's std stream(if any) after process exits.Z-IOBRetrieves the scheduling priority of the process specified by pid.The returned value of priority is between -20 (high priority) and 19 (low priority). On Windows, the returned priority will equal one of the PRIORITY constants.Z-IO=Sets the scheduling priority of the process specified by pid.^The priority value range is between -20 (high priority) and 19 (low priority). The constants , , , , , and # are also provided for convenience.Z-IO%processStdStreams options are ignoredZ-IOstdinZ-IOstdout, stderr, exit codeZ-IO%processStdStreams options are ignoredZ-IOstdinZ-IOstdout, stderr, exit code1CBA  1 CBA Special code on windows(c) Winterland, 2017-2018BSDdrkoster@qq.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqZ-IOf is necessary for some socket code because on windows WSAStartup has to be called before use sockets.This functions will run  uv__once_init once if not run before,TCP/UDP socket address API(c) Winterland, 2018BSDdrkoster@qq.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkq&OZ-IO-Flags that control the querying behaviour of . For more information, see +https://tools.ietf.org/html/rfc3493#page-30Z-IOResolve a datagram-based service name. This is required only for the few protocols that have different port numbers for their datagram-based versions than for their stream-based versions.Z-IO;If the hostname cannot be looked up, an IO error is thrown.Z-IO>If a host is local, return only the hostname part of the FQDN.Z-IOThe name of the host is not looked up. Instead, a numeric representation of the host's address is returned. For an IPv4 address, this will be a dotted-quad string. For IPv6, it will be colon-separated hexadecimal.Z-IOnThe name of the service is not looked up. Instead, a numeric representation of the service is returned.Z-IO Address infoZ-IO-Flags that control the querying behaviour of . For more information, see +https://tools.ietf.org/html/rfc3493#page-25Z-IOThe list of returned  values will only contain IPv4 addresses if the local system has at least one IPv4 interface configured, and likewise for IPv6. (Only some platforms support this.)Z-IOIf  is specified, return all matching IPv6 and IPv4 addresses. Otherwise, this flag has no effect. (Only some platforms support this.)Z-IOThe  field of the first returned / will contain the "canonical name" of the host.Z-IOThe  argument must[ be a numeric address in string form, and network name lookups will not be attempted.Z-IOThe  argument must{ be a port number in string form, and service name lookups will not be attempted. (Only some platforms support this.)Z-IOIf no 3 value is provided, the network address in each } will be left as a "wild card". This is useful for server applications that will accept connections from any client.Z-IOIf an IPv6 lookup is performed, and no IPv6 addresses are found, IPv6-mapped IPv4 addresses will be returned. (Only some platforms support this.)Z-IOEither a service name e.g., "http" or a numeric port number.Z-IOEither a host name e.g.,  "haskell.org"i or a numeric host address string consisting of a dotted decimal IPv4 address or an IPv6 address e.g.,  "192.168.0.1".Z-IOIndicate whether the given % will have any effect on this system.Z-IO&Default hints for address lookup with .addrFlags defaultHints[]addrFamily defaultHints AF_UNSPECaddrSocketType defaultHints NoSocketTypeaddrProtocol defaultHints0Z-IO>Resolve a host or service name to one or more addresses. The + values that this function returns contain 1 values that you can use to init TCP connection.^This function is protocol independent. It can return both IPv4 and IPv6 address information.The  argument specifies the preferred query behaviour, socket options, or protocol. You can override these conveniently using Haskell's record update syntax on , for example as follows:Rlet hints = defaultHints { addrFlags = [AI_NUMERICHOST], addrSocketType = Stream }9You must provide non empty value for at least one of the  or  arguments.  can be either a numeric network address (dotted quad for IPv4, colon-separated hex for IPv6) or a hostname. In the latter case, its addresses will be looked up unless 3 is specified as a hint. If you do not provide a  value and do not set a as a hint, network addresses in the result will contain the address of the loopback interface.If the query fails, this function throws an IO exception instead of returning an empty list. Otherwise, it returns a non-empty list of  values.There are several reasons why a query might result in several values. For example, the queried-for host could be multihomed, or the service might be available via several protocols.HNote: the order of arguments is slightly different to that defined for  getaddrinfo in RFC 2553. The ; parameter comes first to make partial application easier.5addr:_ <- getAddrInfo (Just hints) "127.0.0.1" "http"addrAddress addr 127.0.0.1:80Z-IOPeek addrinfo linked list.Z-IOcResolve an address to a host or service name. This function is protocol independent. The list of ! values controls query behaviour.sIf a host or service's name cannot be looked up, then the numeric form of the address or service will be returned.9If the query fails, this function throws an IO exception.<addr:_ <- getAddrInfo (Just defaultHints) "127.0.0.1" "http"IgetNameInfo [NI_NUMERICHOST, NI_NUMERICSERV] True True $ addrAddress addr("127.0.0.1", "80")Z-IOPack a list of values into a bitmask. The possible mappings from value to bit-to-set are given as the first argument. We assume that each value can cause exactly one bit to be set; unpackBits will break if this property is not true.Z-IO'Unpack a bitmask into a list of values.Z-IO output host Z-IOoutput serviceZ-IOflagsZ-IOhost Z-IOserviceZ-IOhintsZ-IOoutput addrinfo linked listZ-IO!preferred socket type or protocolZ-IOhost name to look upZ-IOservice name to look upZ-IO%resolved addresses, with "best" firstZ-IO!flags to control lookup behaviourZ-IOwhether to look up a hostnameZ-IO!whether to look up a service nameZ-IOthe address to look upDNS, TCP, UDP, IPC(c) Dong Han, 2020BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkq*8  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG9:"#$%& !"#$%&'()foptuvwxyz{|}~ !"#$%&$%'$%()*)+),-./0123435363678797:7;7<7=7>7?7@7A7B7C7C7D7D7E7E7F7F7G7G7H7H7I7I7J7JKL)M)N)O)P)P)Q)Q)R)R)S)S)T)T)U)U)V)V)W)X)Y)Z)[)\)])^_`_a_b_c_d_e_f_g_h_i_j_k_lmnmompmoqrqsqtquqvqwqxqyqzq{q|q}"~qr      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}}~                                                                                                                        ! ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                                                                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                                                                                                                           !"#$%&'()*+,-./0123456789::;<=>?@ABCDEFGGHIJKLLMNOPQRSTUVWXYZZ[\]]^_`abcdefghijklmnopqrstuvwxyz{|}~K$%$$%$    $  "#Z-IO-0.1.5.2-E8snmgiQshiGGBBWzHXGeMZ.IO.Exception Z.IO.Buffered Z.IO.ProcessZ.IO.StdStream Z.IO.UV.ErrnoZ.IO.Network.SocketAddrZ.IO.LowResTimer Z.IO.ResourceZ.Compression.Zlib Z.IO.UV.FFIZ.IO.FileSystemZ.IO.UV.Manager Z.IO.LoggerZ.IO.Network.UDPZ.IO.FileSystem.ThreadedZ.IO.EnvironmentZ.IO.UV.UVStreamZ.IO.Network.TCPZ.IO.Network.IPC Z.IO.UV.WinZ.IO.Network.DNSEResourceVanishedSystem.TimeouttimeoutZ.IOLoggerSystem.EnvironmentgetArgs Z.IO.NetworkbaseGHC.BaseassertGHC.Stack.Types CallStack%Z-Data-0.1.6.1-GLcgNjz5rwhGummXWGT9XBZ.Data.Vector.Base chunkOverheadsmallChunkSizedefaultChunkSizeGHC.IO.ExceptionArrayExceptionIndexOutOfBoundsUndefinedElementGHC.Conc.SignalSignalControl.Concurrent.MVarwithMVar GHC.Stack callStackControl.ExceptionallowInterruptcatchesHandlerControl.Exception.BasebracketOnErrorbracket_finallybracket onExceptiontryJusttry mapException handleJusthandle catchJustPatternMatchFail RecSelError RecConError RecUpdError NoMethodError TypeErrorNonTerminationNestedAtomically GHC.Conc.SyncthrowToioErrorasyncExceptionFromExceptionasyncExceptionToExceptionBlockedIndefinitelyOnMVarBlockedIndefinitelyOnSTMDeadlockAllocationLimitExceededCompactionFailedAssertionFailedSomeAsyncException UserInterrupt ThreadKilled HeapOverflow StackOverflowAsyncException ExitFailure ExitSuccessExitCodeGHC.IOevaluateuninterruptibleMaskuninterruptibleMask_maskmask_getMaskingState interruptiblethrowIOcatchMaskedUninterruptibleMaskedInterruptibleUnmasked MaskingState GHC.Exceptionthrow ErrorCallErrorCallWithLocationGHC.Exception.Type SomeExceptiondisplayException fromException toException ExceptionRatioZeroDenominatorDenormal DivideByZeroLossOfPrecision UnderflowOverflowArithException HasCallStack uv_err_name uv_strerror UV_EMLINKUV_ENXIOUV_EOF UV_UNKNOWNUV_EXDEV UV_ETXTBSY UV_ETIMEDOUTUV_ESRCH UV_ESPIPE UV_ESHUTDOWNUV_EROFS UV_ERANGE UV_EPROTOTYPEUV_EPROTONOSUPPORT UV_EPROTOUV_EPIPEUV_EPERM UV_ENOTSUP UV_ENOTSOCK UV_ENOTEMPTY UV_ENOTDIR UV_ENOTCONN UV_ENOSYS UV_ENOSPCUV_ENOPROTOOPT UV_ENONET UV_ENOMEM UV_ENOENT UV_ENODEV UV_ENOBUFS UV_ENFILEUV_ENETUNREACH UV_ENETDOWNUV_ENAMETOOLONG UV_EMSGSIZE UV_EMFILEUV_ELOOP UV_EISDIR UV_EISCONNUV_EIO UV_EINVALUV_EINTRUV_EHOSTUNREACHUV_EFBIG UV_EFAULT UV_EEXISTUV_EDESTADDRREQ UV_ECONNRESETUV_ECONNREFUSEDUV_ECONNABORTED UV_ECHARSET UV_ECANCELEDUV_EBUSYUV_EBADF UV_EALREADYUV_EAI_SOCKTYPEUV_EAI_SERVICEUV_EAI_PROTOCOLUV_EAI_OVERFLOW UV_EAI_NONAME UV_EAI_NODATA UV_EAI_MEMORY UV_EAI_FAMILY UV_EAI_FAILUV_EAI_CANCELEDUV_EAI_BADHINTSUV_EAI_BADFLAGS UV_EAI_AGAINUV_EAI_ADDRFAMILY UV_EAGAINUV_EAFNOSUPPORTUV_EADDRNOTAVAIL UV_EADDRINUSE UV_EACCESUV_E2BIG uvStdError uvErrNameIOEInfoioeNameioeDescription ioeCallStack Interrupted TimeExpiredUnsupportedOperation HardwareFaultInappropriateTypeInvalidArgument OtherError ProtocolError SystemErrorUnsatisfiedConstraintsPermissionDeniedIllegalOperationEOFResourceExhausted ResourceBusy NoSuchThing AlreadyExistsSomeIOExceptionioExceptionToExceptionioExceptionFromExceptionthrowOOMIfNullthrowUVIfMinusthrowUVIfMinus_ throwECLOSEDthrowECLOSEDSTM throwUVError$fExceptionSomeIOException$fShowSomeIOException$fShowTIOEInfo $fShowIOEInfo$fExceptionInterrupted$fExceptionResourceVanished$fExceptionTimeExpired$fExceptionUnsupportedOperation$fExceptionHardwareFault$fExceptionInappropriateType$fExceptionInvalidArgument$fExceptionOtherError$fExceptionProtocolError$fExceptionSystemError!$fExceptionUnsatisfiedConstraints$fExceptionPermissionDenied$fExceptionIllegalOperation$fExceptionEOF$fExceptionResourceExhausted$fExceptionResourceBusy$fExceptionNoSuchThing$fExceptionAlreadyExists$fShowInterrupted$fShowResourceVanished$fShowTimeExpired$fShowUnsupportedOperation$fShowHardwareFault$fShowInappropriateType$fShowInvalidArgument$fShowOtherError$fShowProtocolError$fShowSystemError$fShowUnsatisfiedConstraints$fShowPermissionDenied$fShowIllegalOperation $fShowEOF$fShowResourceExhausted$fShowResourceBusy$fShowNoSuchThing$fShowAlreadyExistsProtocolNumber SocketType SocketFamily PortNumber Inet6AddrInetAddr getInetAddrScopeIDFlowInfo SocketAddrSocketAddrInetSocketAddrInet6htonlntohlhtonsntohs IPPROTO_UDP IPPROTO_TCP IPPROTO_IPIPPROTO_DEFAULTSOCK_ANYSOCK_SEQPACKETSOCK_RDMSOCK_RAW SOCK_DGRAM SOCK_STREAMAF_INET6AF_INET AF_UNSPECsockAddrFamilyipv4ipv6inetAny inetBroadcastinetNone inetLoopbackinetUnspecificGroupinetAllHostsGroupinetMaxLocalGroupinetAddrToTupletupleToInetAddrinet6Any inet6Loopbackinet6AddrToTupletupleToInet6AddrpeekSocketAddrpokeSocketAddrwithSocketAddrwithSocketAddrUnsafesizeOfSocketAddrwithSocketAddrStoragewithSocketAddrStorageUnsafesizeOfSocketAddrStoragepeekSocketAddrMBApokeSocketAddrMBAportAny$fUnalignedInetAddr$fStorableInetAddr$fShowInetAddr$fUnalignedInet6Addr$fStorableInet6Addr$fShowInet6Addr$fUnalignedPortNumber$fStorablePortNumber$fShowSocketAddr $fEqInetAddr $fOrdInetAddr $fEqInet6Addr$fOrdInet6Addr$fEqPortNumber$fOrdPortNumber$fEnumPortNumber$fGenericPortNumber$fShowPortNumber$fReadPortNumber$fNumPortNumber$fBoundedPortNumber$fRealPortNumber$fIntegralPortNumber$fShowTPortNumber$fEqSocketAddr$fOrdSocketAddr LowResTimerLowResTimerManager%lowResTimerManagerCapabilitiesChangedgetLowResTimerManagerisLowResTimerManagerRunningregisterLowResTimerregisterLowResTimer_registerLowResTimerOnqueryLowResTimercancelLowResTimercancelLowResTimer_ timeoutLowRestimeoutLowResExthrottle throttle_throttleTrailing_$fExceptionTimeOutException$fShowTimeOutExceptionPool PoolState PoolClosed PoolScanning PoolEmptyResourceacquire initResource initResource_ withResource withResource'initPoolstatPool initInPool$fMonadIOResource$fMonadResource$fApplicativeResource$fFunctorResource $fEqPoolState$fShowPoolStateSinkSourceBufferedExceptionParseExceptionShortReadExceptionBufferedOutput BufferedInputOutput writeOutputInput readInputnewBufferedInputnewBufferedOutputnewBufferedOutput'newBufferedInput' readBuffer readExactly readExactly'readAllreadAll' unReadBuffer readParser readToMagic readToMagic'readLine readLine' writeBuffer writeBuilder flushBuffer sourceBuffer sinkBuffersourceFromList>+> collectSource parseSource concatSource zipSource>>>>=$fExceptionBufferedException$fShowBufferedExceptionDecompressConfigdecompressWindowBitsdecompressDictionaryCompressConfig compressLevelcompressWindowBitscompressMemoryLevelcompressDictionarycompressStrategyMemLevel WindowBits CompressLevelStrategyZ_DEFAULT_COMPRESSIONZ_BEST_COMPRESSION Z_BEST_SPEEDZ_DEFAULT_STRATEGYZ_FIXEDZ_RLEZ_HUFFMAN_ONLY Z_FILTEREDdefaultWindowBitsdefaultMemLeveldefaultCompressConfig compressSinkcompressdefaultDecompressConfigdecompressSource decompress$fExceptionZlibException$fShowCompressConfig$fEqCompressConfig$fOrdCompressConfig$fGenericCompressConfig$fShowTCompressConfig$fShowDecompressConfig$fEqDecompressConfig$fOrdDecompressConfig$fGenericDecompressConfig$fShowTDecompressConfig$fShowZlibExceptionOSName os_sysname os_release os_version os_machinePriorityPIDResUsageru_utimeru_stime ru_maxrssru_ixrssru_idrssru_isrss ru_minflt ru_majfltru_nswap ru_inblock ru_oublock ru_msgsnd ru_msgrcv ru_nsignalsru_nvcsw ru_nivcswTimeValtv_sectv_usec UVHandleTypeProcessStdStream ProcessIgnore ProcessCreateProcessInheritProcessOptions processFile processArgs processEnv processCWD processFlags processUID processGIDprocessStdStreams ProcessFlagGIDUID SymlinkFlag AccessResult NoExistence NoPermissionAccessOK AccessMode CopyFileFlagFStatstDevstModestNlinkstUidstGidstRdevstInostSize stBlksizestBlocksstFlagsstGenstAtimstMtimstCtim stBirthtim UVTimeSpec uvtSecond uvtNanoSecond DirEntType DirEntUnknown DirEntFile DirEntDir DirEntLink DirEntFIFO DirEntSocket DirEntChar DirEntBlock UVDirEntTypeFileFlagFileModeTTYModeUDPFlag MembershipUVHandle UVRunMode UVLoopDataUVLoopUVFD UVSlotUnsafe unsafeGetSlotUVSloths_uv_random_threaded hs_uv_random uv_os_unameuv_os_gethostnameuv_os_unsetenv uv_os_setenv uv_os_getenvuv_os_free_environ uv_os_environ uv_hrtimeuv_os_setpriorityuv_os_getpriority uv_os_getppid uv_os_getpid uv_getrusage uv_uptimeuv_resident_set_memoryuv_guess_handleuv_kill hs_uv_spawnhs_uv_fs_realpath_threadedhs_uv_fs_readlink_threadedhs_uv_fs_readlink_extra_cleanuphs_uv_fs_realpathhs_uv_fs_readlinkhs_uv_fs_readlink_cleanuphs_uv_fs_symlink_threadedhs_uv_fs_symlinkhs_uv_fs_link_threaded hs_uv_fs_linkhs_uv_fs_lutime_threadedhs_uv_fs_lutimehs_uv_fs_futime_threadedhs_uv_fs_futimehs_uv_fs_utime_threadedhs_uv_fs_utimehs_uv_fs_fchmod_threadedhs_uv_fs_fchmodhs_uv_fs_chmod_threadedhs_uv_fs_chmodhs_uv_fs_access_threadedhs_uv_fs_accesshs_uv_fs_copyfile_threadedhs_uv_fs_copyfilehs_uv_fs_ftruncate_threadedhs_uv_fs_fdatasync_threadedhs_uv_fs_fsync_threadedhs_uv_fs_rename_threadedhs_uv_fs_lstat_threadedhs_uv_fs_fstat_threadedhs_uv_fs_stat_threadedhs_uv_fs_ftruncatehs_uv_fs_fdatasynchs_uv_fs_fsynchs_uv_fs_renamehs_uv_fs_lstaths_uv_fs_fstat hs_uv_fs_staths_uv_fs_scandir_threadedhs_uv_fs_scandir_extra_cleanuphs_uv_fs_scandirhs_uv_fs_scandir_cleanuphs_uv_fs_mkdtemp_threadedhs_uv_fs_rmdir_threadedhs_uv_fs_mkdir_threadedhs_uv_fs_unlink_threadedhs_uv_fs_write_threadedhs_uv_fs_read_threadedhs_uv_fs_close_threadedhs_uv_fs_open_threadedhs_uv_fs_mkdtemphs_uv_fs_rmdirhs_uv_fs_mkdirhs_uv_fs_unlinkhs_uv_fs_write hs_uv_fs_readhs_uv_fs_close hs_uv_fs_openuv_tty_get_winsizeuv_tty_set_mode uv_tty_inituv_udp_getpeernameuv_udp_getsocknamehs_uv_udp_send_connectedhs_uv_udp_sendhs_uv_udp_check_closehs_uv_udp_check_iniths_uv_udp_check_allocuv_udp_recv_stophs_uv_udp_recv_startuv_udp_set_ttluv_udp_set_broadcastuv_udp_set_multicast_interfaceuv_udp_set_multicast_ttluv_udp_set_multicast_loopuv_udp_set_source_membershipuv_udp_set_membershipuv_udp_disconnectuv_udp_connect uv_udp_bind uv_udp_openuv_udp_init_ex uv_udp_iniths_uv_pipe_connect uv_pipe_bind uv_pipe_iniths_uv_pipe_openhs_set_socket_reusehs_uv_tcp_connect uv_tcp_binduv_tcp_getpeernameuv_tcp_getsocknameuv_tcp_keepaliveuv_tcp_nodelayuv_tcp_init_ex uv_tcp_iniths_uv_tcp_openhs_uv_accept_check_closehs_uv_accept_check_starths_uv_accept_check_iniths_uv_accept_check_alloc hs_uv_write uv_read_stophs_uv_read_starths_uv_listen_resume hs_uv_listen hs_uv_canceluv_unrefhs_uv_handle_closehs_uv_handle_freehs_uv_handle_alloc hs_uv_filenohs_uv_wake_up_asynchs_uv_wake_up_timer uv_loop_alive uv_run_safeuv_runhs_uv_loop_closehs_uv_loop_inituv_version_string uv_versionUV_MAXHOSTNAMESIZEPRIORITY_HIGHEST PRIORITY_HIGHPRIORITY_ABOVE_NORMALPRIORITY_NORMALPRIORITY_BELOW_NORMAL PRIORITY_LOWUV_FILE UV_SIGNALUV_UDPUV_TTYUV_TIMERUV_TCP UV_STREAM UV_PROCESS UV_PREPAREUV_POLL UV_NAMED_PIPEUV_IDLE UV_HANDLE UV_FS_POLL UV_FS_EVENTUV_CHECKUV_ASYNCUV_UNKNOWN_HANDLEPROCESS_WINDOWS_HIDE_GUIPROCESS_WINDOWS_HIDE_CONSOLEPROCESS_WINDOWS_HIDEPROCESS_DETACHED"PROCESS_WINDOWS_VERBATIM_ARGUMENTSPROCESS_SETGIDPROCESS_SETUIDSYMLINK_JUNCTION SYMLINK_DIRSYMLINK_DEFAULTX_OKW_OKR_OKF_OKCOPYFILE_FICLONE_FORCECOPYFILE_FICLONE COPYFILE_EXCLCOPYFILE_DEFAULTO_WRONLYO_TRUNC O_TEMPORARYO_SYNC O_SYMLINK O_SHORT_LIVED O_SEQUENTIALO_RDWRO_RDONLYO_RANDOM O_NONBLOCK O_NOFOLLOWO_NOCTTY O_NOATIMEO_EXLOCKO_EXCLO_DSYNC O_DIRECTORYO_DIRECTO_CREATO_APPEND DEFAULT_MODES_IXOTHS_IWOTHS_IROTHS_IRWXOS_IXGRPS_IWGRPS_IRGRPS_IRWXGS_IXUSRS_IWUSRS_IRUSRS_IRWXU TTY_MODE_IO TTY_MODE_RAWTTY_MODE_NORMALUV_UDP_PARTIAL UDP_REUSEADDR UDP_IPV6ONLY UDP_DEFAULT JOIN_GROUP LEAVE_GROUP UV_RUN_NOWAIT UV_RUN_ONCEUV_RUN_DEFAULTINIT_LOOP_SIZESO_REUSEPORT_LOAD_BALANCEpeekUVEventQueueclearUVEventCounterpeekUVBufferTablepeekUVLoopDatapeekUVHandleDatauV_TCP_IPV6ONLYfromUVDirEntType peekUVDirEnt uvStatSize peekUVStatprocessStdStreamFlagsizeOfResUsage peekResUsage getOSName$fStorableUVTimeSpec$fReadDirEntType$fShowDirEntType$fEqDirEntType$fOrdDirEntType$fEnumDirEntType$fGenericDirEntType$fShowTDirEntType$fEncodeJSONDirEntType$fToValueDirEntType$fFromValueDirEntType$fShowUVTimeSpec$fReadUVTimeSpec$fEqUVTimeSpec$fOrdUVTimeSpec$fGenericUVTimeSpec$fShowTUVTimeSpec$fEncodeJSONUVTimeSpec$fToValueUVTimeSpec$fFromValueUVTimeSpec $fShowFStat $fReadFStat $fEqFStat $fOrdFStat$fGenericFStat $fShowTFStat$fEncodeJSONFStat$fToValueFStat$fFromValueFStat$fShowAccessResult$fEqAccessResult$fOrdAccessResult$fEnumAccessResult$fGenericAccessResult$fShowTAccessResult$fEncodeJSONAccessResult$fToValueAccessResult$fFromValueAccessResult$fEqUID$fOrdUID $fShowUID $fGenericUID $fStorableUID $fPrimUID$fUnalignedUID$fEncodeJSONUID $fToValueUID$fFromValueUID $fShowTUID$fEqGID$fOrdGID $fShowGID $fGenericGID $fStorableGID $fPrimGID$fUnalignedGID$fEncodeJSONGID $fToValueGID$fFromValueGID $fShowTGID$fEqProcessStdStream$fOrdProcessStdStream$fShowProcessStdStream$fGenericProcessStdStream$fShowTProcessStdStream$fEqProcessOptions$fOrdProcessOptions$fShowProcessOptions$fGenericProcessOptions$fShowTProcessOptions $fShowTimeVal $fReadTimeVal $fEqTimeVal $fOrdTimeVal$fGenericTimeVal$fShowTTimeVal$fEncodeJSONTimeVal$fToValueTimeVal$fFromValueTimeVal$fShowResUsage$fReadResUsage $fEqResUsage $fOrdResUsage$fGenericResUsage$fShowTResUsage$fEncodeJSONResUsage$fToValueResUsage$fFromValueResUsage$fEqPID$fOrdPID $fShowPID $fGenericPID $fStorablePID $fPrimPID$fUnalignedPID$fEncodeJSONPID $fToValuePID$fFromValuePID $fShowTPID $fEqOSName $fOrdOSName $fShowOSName$fGenericOSName $fShowTOSName$fEncodeJSONOSName$fToValueOSName$fFromValueOSNameFilePtrFile getFileFDreadFile writeFile newFilePtr getFileOffset setFileOffsetinitFile quickReadFilequickReadTextFilequickWriteFilequickWriteTextFilemkdirunlinkmkdtemprmdirscandirstatlstatfstatrenamefsync fdatasync ftruncatecopyfileaccesschmodfchmodutimefutimelutimelinksymlinkreadlinkrealpath $fOutputFile $fInputFile$fOutputFilePtr$fInputFilePtr UVManager getUVManager getBlockMVarpokeBufferTablepeekBufferTable withUVManagerwithUVManager' getUVSlot withUVRequestwithUVRequest_withUVRequest'withUVRequestExforkBa $fEqUVManager$fShowUVManager StdStreamisStdStreamTTYgetStdStreamFDstdinstdoutstderrstdinBuf stdoutBuf stderrBufsetStdinTTYModegetStdoutWinSizeprintStdputStd putLineStd readLineStd$fOutputStdStream$fInputStdStream LoggerConfigloggerMinFlushIntervalloggerLineBufSizeloggerShowDebug loggerShowTSloggerShowSourceLocloggerPushBuilder flushLoggerflushLoggerThrottled loggerTSCache loggerFmt LogFormatterdefaultTSCacheflushLog newLogger defaultFmtdefaultFmtCallStack setStdLogger getStdLogger withStdLoggerdebuginfowarnfatal otherLeveldebugToinfoTowarnTofatalTo otherLevelTo UDPRecvConfig recvMsgSize recvBatchSize ConnectedUDP UDPConfigudpSendMsgSize udpLocalAddrUDPdefaultUDPConfiginitUDP getSockName connectUDP disconnectUDP getPeerNamesendConnectedUDPsendUDPsetMulticastLoopsetMulticastTTLsetMulticastInterface setBroadcastsetTTL setMembershipsetSourceMembershipdefaultUDPRecvConfig recvUDPLooprecvUDP $fShowUDP$fShowUDPConfig $fEqUDPConfig$fOrdUDPConfig$fShowConnectedUDPFilePtrTFileT getFileTFD readFileT writeFileT newFilePtrT initFileT $fOutputFileT $fInputFileT$fOutputFilePtrT$fInputFilePtrT getAllEnvgetEnvgetEnv'setEnvunsetEnvgetResidentSetMemory getUpTimegetHighResolutionTime getResUsagegetPIDgetPPID getHostname getRandom getRandomTUVStream uvsHandleuvsSlot uvsManager uvsClosed initUVStream closeUVStream getUVStreamFD helloWorldecho$fOutputUVStream$fInputUVStream$fShowUVStreamTCPServerConfig tcpListenAddrtcpListenBacklogtcpServerWorkerNoDelaytcpServerWorkerKeepAliveTCPClientConfig tcpClientAddr tcpRemoteAddrtcpClientNoDelaytcpClientKeepAlivedefaultTCPClientConfig initTCPClientdefaultTCPServerConfigstartTCPServer initTCPStream setTCPNoDelaysetTCPKeepAlivegetTCPSockNamegetTCPPeerNameIPCServerConfig ipcListenNameipcListenBacklogIPCClientConfig ipcClientName ipcTargetNamedefaultIPCClientConfig initIPCClientdefaultIPCServerConfigstartIPCServer initIPCStream ProcessStateProcessRunning ProcessExitedSIGHUPSIGKILLSIGINTSIGTERMdefaultProcessOptionswaitProcessExit getProcessPIDkillPID initProcess readProcessreadProcessTextspawn getPriority setPriority$fShowProcessState$fEqProcessState$fOrdProcessState$fGenericProcessState$fShowTProcessState$fEncodeJSONProcessState$fToValueProcessState$fFromValueProcessState withUVInitDo NameInfoFlagNI_DGRAM NI_NAMEREQD NI_NOFQDNNI_NUMERICHOSTNI_NUMERICSERVAddrInfo addrFlags addrFamilyaddrSocketType addrProtocol addrAddress addrCanonName AddrInfoFlag AI_ADDRCONFIGAI_ALL AI_CANONNAMEAI_NUMERICHOSTAI_NUMERICSERV AI_PASSIVE AI_V4MAPPED ServiceNameHostNameaddrInfoFlagMappingaddrInfoFlagImplementednameInfoFlagMapping defaultHints getAddrInfofollowAddrInfo getNameInfo$fStorableAddrInfo$fEqAddrInfoFlag$fReadAddrInfoFlag$fShowAddrInfoFlag $fEqAddrInfo$fShowAddrInfo$fEqNameInfoFlag$fReadNameInfoFlag$fShowNameInfoFlagGHC.PtrnullPtr TimerListsetNumCapabilities Data.FunctorvoidTimeOutException GHC.MaybeNothingensureLowResTimerManagerstartLowResTimerManagerfireLowResTimerQueueEntryghc-prim GHC.TypesIOControl.Monad.IO.ClassMonadIOemptyZ.Data.Parser.Base ParseErrorBytesZ.Data.Builder.BaseBuildercheckFileClosedDoubleGHC.MVarMVarstartUVManager cancelUVReqZ.Data.Text.ShowTShowTFalseTruedefaultLoggerConfig GHC.IORefIORefflushDefaultLoggerBool recvUDPWithcheckFileTClosedpackBits unpackBitshs_getnameinfohs_getaddrinfo