!&&      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./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 { | } ~                                  Errno provided by libuv(c) Winterland, 2017-2018BSDdrkoster@qq.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqfK_Z-IOtoo many links`Z-IOno such device or addressaZ-IO end of filebZ-IO unknown errorcZ-IOcross-device link not permitteddZ-IOtext file is busyeZ-IOconnection timed outfZ-IOno such processgZ-IO invalid seekhZ-IO-cannot send after transport endpoint shutdowniZ-IOread-only file systemjZ-IOresult too largekZ-IOprotocol wrong type for socketlZ-IOprotocol not supportedmZ-IOprotocol errornZ-IO broken pipeoZ-IOoperation not permittedpZ-IO!operation not supported on socketqZ-IOsocket operation on non-socketrZ-IOdirectory not emptysZ-IOnot a directorytZ-IOsocket is not connecteduZ-IOfunction not implementedvZ-IOno space left on devicewZ-IOprotocol not availablexZ-IOmachine is not on the networkyZ-IOnot enough memoryzZ-IOno such file or directory{Z-IOno such device|Z-IOno buffer space available}Z-IOfile table overflow~Z-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 longO]^_`abcdefghijklmnopqrstuvwxyz{|}~O^]~}|{zyxwvutsrqponmlkjihgfedcba`_Extensible IO exceptions(c) Dong Han, 2017-2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqx Z-IOIO exceptions informations.The ShowTp instances does not check if name and description are valid UTF8 string, it's your responsibility to make sure.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  "!$#&%'()*,+.-0/21436587=<;:9>?@ABCDEFJIHGKNLMSRQPZYXWVUT[\Oޏ  "!$#&%'()*,+.-0/21436587=<;:9>?@ABCDEFJIHGKNLMLSRQPZYXWVUT\O[TCP/UDP socket address API(c) Winterland, 2018BSDdrkoster@qq.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqc Z-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)60000 Z-IO'Independent of endianness. For example ::1 is stored as  (0, 0, 0, 1).For direct manipulation prefer 5 and 6.Z-IO'Independent of endianness. For example  127.0.0.1 is stored as (127, 0, 0, 1).For direct manipulation prefer 1 and 2.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.*Z-IO 0.0.0.0+Z-IO 255.255.255.255,Z-IO 255.255.255.255-Z-IO  127.0.0.1.Z-IO  224.0.0.0/Z-IO  224.0.0.10Z-IO  224.0.0.2551Z-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.2Z-IOConverts IPv4 quadruple to .3Z-IO ::4Z-IO ::15Z-IOconvert   to octets.6Z-IOconvert   from octets.9Z-IOPass  to FFI as pointer.:Z-IOPass  to FFI as pointer.,USE THIS FUNCTION WITH UNSAFE FFI CALL ONLY.<Z-IOAllocate space for sockaddr_storage and pass to FFI.=Z-IOAllocate space for sockaddr_storage and pass to FFI.,USE THIS FUNCTION WITH UNSAFE FFI CALL ONLY.AZ-IO :0;"#!  &%$    '()*+,-./0123456789:;<=>?@AH()'9:;<=>*+,-./012  3456  A &%$&%$"#! "#! 78?@"Low resolution (0.1s) timing wheel(c) Dong Han, 2017-2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkq՚kZ-IOTimer registered by p or r.Z-IOA simple timing wheelmZ-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.nZ-IOGet a l for current thread.oZ-IO+Check if a timer manager's wheel is turning#This is mostly for testing purpose.pZ-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) qZ-IO (p t action)rZ-IOSame as p%, but allow you choose timer manager.sZ-IO2Query how many seconds remain before timer firing.;A return value <= 0 indictate the timer is firing or fired.tZ-IO+Cancel a timer, return the remaining ticks.6This function have no effect after the timer is fired.uZ-IO void . cancelLowResTimervZ-IO similar to <, this function put a limit on time which an IO can consume.,Note timeoutLowRes is also implemented with SN underhood, which can have some surprising effects on some devices, e.g. use v with reading or writing on UVStreams may close the UVStream: once a reading or writing is not able to be done in time.wZ-IO Similar to v, 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.xZ-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.yZ-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.zZ-IO Similar to y 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.pZ-IOtimeout in unit of 0.1sZ-IO3the action you want to perform, it should not blockqZ-IOtimeout in unit of 0.1sZ-IO3the action you want to perform, it should not blockrZ-IOa low resolution timer managerZ-IOtimeout in unit of 0.1sZ-IO3the action you want to perform, it should not blockvZ-IOtimeout in unit of 0.1swZ-IOtimeout in unit of 0.1sxZ-IOcache time in unit of 0.1sZ-IOthe original IO actionZ-IOthrottled IO actionyZ-IOcache time in unit of 0.1sZ-IOthe original IO actionZ-IOthrottled IO actionzZ-IOthe original IO actionZ-IOthrottled IO actionklmnopqrstuvwxyzpqrkstuvwxyzlnomThe Resource monad(c) Dong Han, 2017BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkq }Z-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.Z-IOA  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  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 B M since some resource initializations may assume async exceptions are masked.'+ instance is provided so that you can lift & computation inside %, this is convenient for propagating  around since many & computations carry finalizers.3A convention in Z-IO is that functions returning a  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  from create and release action.Note, resourceA doesn't open resource itself, resource is created when you use with / with'.Z-IOCreate  from create and release action.]This function is useful when you want to add some initialization and clean up action inside  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 ULike 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 ~7This function is useful when debug, under load lots of  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 0 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).}~}~Buffered IO interface(c) Dong Han, 2017-2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqL!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`ghkqd6Z-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`ghkq,;Z-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 operations Z-IOblock output operations Z-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-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.FZ-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.RZ-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$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 permission Z-IO!00100 user has execute permission!Z-IO00200 user has write permission"Z-IO00400 user has read permission#Z-IO>00700 user (file owner) has read, write and execute permission5Z-IO-Peek loop data pointer from uv loop pointer.P      !10/.-,+*)('&%$#"235467?>=<;:98@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEPURSTQ10PO234MN/.-5L67JK,+HI*)('FG&%$DE#"! BC     @A7?>=<;:9889:;<=6>@?2354 !10/.-,+*)('&%$#"AB~}|{zyxwvutsrqponmlkjihgfed     CDcba`_^]\[ZYEXWV  Filesystem IO(c) Dong Han, 2017~2019BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkq(,  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-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 , which open a file when used.\Resource closing is thread safe, on some versions of OSX, repeatly open and close same file 0 may result in shared memory object error, use  to avoid that.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 time'Z-IOatime, i.e. access timeZ-IOmtime, i.e. modify timen !"#$%&'()*+,-./012345789:;<=>?B    D#"!   !"#$%&'()*+ D#"! #"! B        789:;<=>? !"#$%&'()*+,-./012345 !"#$%&'()*+ IO manager based on libuv(c) Dong Han, 2017-2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqhM0Z-IOA haskell data type wrap an  uv_stream_t inside0# DO NOT provide thread safety! Use 0C concurrently in multiple threads will lead to undefined behavior.7Z-IOGet 6 runing on the same capability.8Z-IOGet /% from blocking table with given slot.9Z-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!0Z-IOStart the uv loop=Z-IORun a libuv FFI to get a R (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 R into UI, so that the block table size synchronize with libuv side's slot table.1Z-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 1: 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.AZ-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.BZ-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).CZ-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 C 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 7]), and provide a custom initialization function (which should throw an exception if failed).9Z-IO uv managerZ-IOuv slotZ-IObuffer pointerZ-IO buffer length@Z-IOconvert function0123456789:;<=>?@ABC678:9;<=>?@AC012345B  TTY devices(c) Dong Han, 2018~2019BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkq~ IZ-IO!Standard input and output streamsFWe support both regular file and TTY based streams, when initialized gN is called to decide which type of devices are connected to standard streams.Note Iv is not thread safe, you shouldn't use them without lock. For the same reason you shouldn't use stderr directly, use  module instead.KZ-IOThe global stdin stream.LZ-IOThe global stdout stream.'| If you want to write logs, don't use L directly, use  instead.MZ-IOThe global stderr stream.'| If you want to write logs, don't use M directly, use  instead.NZ-IO,A global buffered stdin stream protected by /.OZ-IO-A global buffered stdout stream protected by /.'| If you want to write logs, don't use O directly, use  instead.PZ-IO-A global buffered stderr stream protected by /.'| If you want to write logs, don't use P directly, use  instead.QZ-IO;Change terminal's mode if stdin is connected to a terminal.RZ-IObGet terminal's output window size in (width, height) format, return (-1, -1) if stdout is a file.SZ-IOprint a 2 and flush to stdout.TZ-IOprint a + and flush to stdout.UZ-IOprint a +& and flush to stdout, with a linefeed.VZ-IOread a line from stdinF&%IJKLMNOPQRSTUVIJF&%&%QRKLMNOPSVTU High performance logger(c) Dong Han, 2017-2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkq[Z-IO%Minimal flush interval, see Notes on p\Z-IO"Buffer size to build each log/line]Z-IOSet to 3 to filter debug logs^Z-IOSet to 3, to disable auto data/time string prepending_Z-IOSet to 4 to enable source location linebZ-IOpush log into buffercZ-IO&flush logger's buffer to output devicedZ-IOthrottled flush, e.g. use z from Z.IO.LowResTimereZ-IO/A IO action return a formatted date/time string5Z-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 .hZ-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.iZ-IO(Use this function to implement a simple 6 based concurrent logger. fbList <- newIORef [] let flush = flushLog buffered bList .. return $ Logger (pushLog bList) flush ... jZ-IOMake a new simple logger.kZ-IOA default log formatter ! [DEBUG][2020-10-09T07:44:14UTC][ interactive:7:1]This a debug messagelZ-IODDefault stack formatter which fetch the logging source and location.mZ-IOChange the global logger.nZ-IOGet the global logger.7Z-IOManually flush stderr logger.oZ-IO'Flush stderr logger when program exits.gZ-IOdata/time stringZ-IO log levelZ-IO log contentZ-IOcall stack tracekZ-IOshow call stack info?tZ-IO log levelZ-IOflush immediately?Z-IO log contentyZ-IO log levelZ-IOflush immediately?Z-IO log content!YZ[\]^_`abcdefghijklmnopqrstuvwxy!`abcdefYZ[\]^_mnojpqrstuvwxyhlgki UDP servers and clients(c) Dong Han, 2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqzZ-IOReceiving buffering config.|Z-IO"maximum size of a received message}Z-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 6Z-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 8J to indicate if the message is partial (larger than receive buffer size).Z-IO1 ~ 255Z-IO(Multicast address to set membership for.Z-IOInterface address.Z-IOUV_JOIN_GROUP | UV_LEAVE_GROUPZ-IO(Multicast address to set membership for.Z-IOInterface address.Z-IOSource address.Z-IOUV_JOIN_GROUP | UV_LEAVE_GROUP9Z-IO uv_check_t#H*)(J+,z{|}~(H*)(*)(z{|}~J+,+,TCP servers and clients(c) Dong Han, 2018BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqZ-IOA TCP server configurationZ-IOlistening addressZ-IO=listening socket's backlog size, should be large enough(>128)Z-IOif we want to use  TCP_NODELAYZ-IO+set keepalive delay for worker socket, see Z-IOA TCP client configurationZ-IO*assign a local address, or let OS pick oneZ-IOremote target addressZ-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 %, 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-IO>A server worker output "hello world" and close the connection.Z-IO-A server worker echo whatever received bytes.Z-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, the socket will be closed upon exception or worker finishes.00*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-IOfworker which get an accepted IPC stream, the socket will be closed upon exception or worker finishes.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 %, 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.00Filesystem IO using threadpool(c) Dong Han, 2017~2019BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqNR 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.'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  / .: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 File.Z-IOGet current offset.Z-IOChange current offset.Z-IO init a file , 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.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 timen !"#$%&'()*+,-./012345789:;<=>?B    D#"! ݕD#"! #"! B        789:;<=>? !"#$%&'()*+,-./012345=Miscellaneous functions(environment variables, metrics, etc.)(c) Dong Han, 2020BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqzZ-IO Computation V 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).Z-IO#Retrieves the environment variable.*Warning: This function is not thread safe.Z-IO5Retrieves the environment variable specified by name.*Warning: This function is not thread safe.Z-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.Z-IOReturns the current process ID.Z-IOReturns the parent process ID.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-IO1Returns the hostname as a null-terminated string.Z-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.Z-IOcFill buf with exactly buflen cryptographically strong random bytes acquired from the system CSPRNG.The function run D in libuv's threadpool, suitable for get long random byte sequences. E ESpecial code on windows(c) Winterland, 2017-2018BSDdrkoster@qq.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkq5Z-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ֱZ-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-IOflags?Z-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 up          DNS, TCP, UDP, IPC(c) Dong Han, 2020BSDwinterland1989@gmail.com experimental non-portableNone+ "#%,-.1789;=>?@AEFHMPSUVX`ghkqښ"#!  &%$    '()*+,-./0123456789:;<=>?@AH*)(J+,0z{|}~     @ !"#$"#%&'&(&)*+,-,.,/,/0102030405060708090:0;0<0<0=0=0>0>0?0?0@0@0A0A0B0B0C0CDE&F&G&H&I&I&J&J&K&K&L&L&M&M&N&N&O&O&P&Q&R&S&TUVUWUXUYUZU[U\U]U^U_U`UaUbcdcecfceghgigjgkglgmgngogpgqgrgs tghuvwxyz{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~        !"#$%&&'()*+,-./0123344556677889::;<=>>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C 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 a b c d e e f g h i j k l m n o p q r s t u v w x y z { | } ~      D"#""#"    "        #Z-IO-0.1.4.0-IfRX4KH4mesBaX238HlX2dZ.IO.Exception Z.IO.Buffered Z.IO.UV.ErrnoZ.IO.Network.SocketAddrZ.IO.LowResTimer Z.IO.ResourceZ.Compression.Zlib Z.IO.UV.FFIZ.IO.FileSystemZ.IO.UV.ManagerZ.IO.StdStream Z.IO.LoggerZ.IO.Network.UDPZ.IO.Network.TCPZ.IO.Network.IPCZ.IO.FileSystem.ThreadedZ.IO.Environment Z.IO.UV.WinZ.IO.Network.DNSEResourceVanishedSystem.TimeouttimeoutZ.IOLoggerSystem.EnvironmentgetArgs Z.IO.NetworkbaseGHC.BaseassertGHC.Stack.Types CallStack%Z-Data-0.1.6.0-9iCfQaSbVFm1BnxqOFfUEOZ.Data.Vector.BasesmallChunkSizedefaultChunkSizeGHC.IO.ExceptionArrayExceptionIndexOutOfBoundsUndefinedElement GHC.Stack callStackControl.ExceptionallowInterruptcatchesHandlerControl.Exception.BasebracketOnErrorbracket_finallybracket onExceptiontryJusttry mapException handleJusthandle catchJustPatternMatchFail RecSelError RecConError RecUpdError NoMethodError TypeErrorNonTerminationNestedAtomically GHC.Conc.SyncthrowToioErrorasyncExceptionFromExceptionasyncExceptionToExceptionBlockedIndefinitelyOnMVarBlockedIndefinitelyOnSTMDeadlockAllocationLimitExceededCompactionFailedAssertionFailedSomeAsyncException UserInterrupt ThreadKilled HeapOverflow StackOverflowAsyncExceptionGHC.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$fStorableSocketFamily$fStorableSocketType$fStorableProtocolNumber $fEqInetAddr $fOrdInetAddr $fEqInet6Addr$fOrdInet6Addr$fEqPortNumber$fOrdPortNumber$fEnumPortNumber$fGenericPortNumber$fShowPortNumber$fReadPortNumber$fNumPortNumber$fBoundedPortNumber$fRealPortNumber$fIntegralPortNumber$fShowTPortNumber$fEqSocketAddr$fOrdSocketAddr$fEqSocketFamily$fOrdSocketFamily$fReadSocketFamily$fShowSocketFamily$fEqSocketType$fOrdSocketType$fReadSocketType$fShowSocketType$fEqProtocolNumber$fOrdProtocolNumber$fReadProtocolNumber$fShowProtocolNumber 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 $fEqStrategy $fOrdStrategy$fShowStrategy$fGenericStrategy$fShowTStrategy$fEqCompressLevel$fOrdCompressLevel$fShowCompressLevel$fGenericCompressLevel$fShowTCompressLevel$fEqWindowBits$fOrdWindowBits$fReadWindowBits$fShowWindowBits$fGenericWindowBits$fNumWindowBits$fShowTWindowBits $fEqMemLevel $fOrdMemLevel$fReadMemLevel$fShowMemLevel$fGenericMemLevel $fNumMemLevel$fShowTMemLevel $fEqZReturn $fOrdZReturn $fShowZReturn$fShowZlibExceptionOSName os_sysname os_release os_version os_machinePIDResUsageru_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 UVHandleType SymlinkFlag AccessResult NoExistence NoPermissionAccessOK AccessMode CopyFileFlagFStatstDevstModestNlinkstUidstGidstRdevstInostSize stBlksizestBlocksstFlagsstGenstAtimstMtimstCtim stBirthtim UVTimeSpec uvtSecond uvtNanoSecondUVDirEnt 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_handlehs_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_iniths_uv_accept_check_alloc hs_uv_write uv_read_stophs_uv_read_starths_uv_listen_resume hs_uv_listen hs_uv_cancelhs_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_HANDLESYMLINK_JUNCTION SYMLINK_DIRSYMLINK_DEFAULTX_OKW_OKR_OKF_OKCOPYFILE_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 uV__DT_FILE uV__DT_DIR uV__DT_LINK uV__DT_FIFO uV__DT_SOCKET uV__DT_CHAR uV__DT_BLOCK peekUVDirEnt uvStatSize peekUVStatsizeOfResUsage peekResUsage getOSName$fStorableUVTimeSpec$fShowUVRunMode $fEqUVRunMode$fOrdUVRunMode$fGenericUVRunMode$fShowTUVRunMode$fShowMembership$fEqMembership$fOrdMembership$fGenericMembership$fEncodeJSONMembership$fToValueMembership$fFromValueMembership$fShowTMembership $fShowUDPFlag $fEqUDPFlag $fOrdUDPFlag$fGenericUDPFlag$fStorableUDPFlag$fUnalignedUDPFlag $fBitsUDPFlag$fFiniteBitsUDPFlag $fNumUDPFlag$fEncodeJSONUDPFlag$fToValueUDPFlag$fFromValueUDPFlag$fShowTUDPFlag $fEqTTYMode $fOrdTTYMode $fShowTTYMode$fGenericTTYMode$fStorableTTYMode$fUnalignedTTYMode $fBitsTTYMode$fFiniteBitsTTYMode $fNumTTYMode$fEncodeJSONTTYMode$fToValueTTYMode$fFromValueTTYMode$fShowTTTYMode $fEqFileMode $fOrdFileMode$fShowFileMode$fGenericFileMode$fStorableFileMode$fUnalignedFileMode$fBitsFileMode$fFiniteBitsFileMode $fNumFileMode$fEncodeJSONFileMode$fToValueFileMode$fFromValueFileMode$fShowTFileMode $fEqFileFlag $fOrdFileFlag$fShowFileFlag$fGenericFileFlag$fStorableFileFlag$fUnalignedFileFlag$fBitsFileFlag$fFiniteBitsFileFlag $fNumFileFlag$fEncodeJSONFileFlag$fToValueFileFlag$fFromValueFileFlag$fShowTFileFlag$fEqUVDirEntType$fOrdUVDirEntType$fShowUVDirEntType$fGenericUVDirEntType$fStorableUVDirEntType$fUnalignedUVDirEntType$fBitsUVDirEntType$fFiniteBitsUVDirEntType$fNumUVDirEntType$fEncodeJSONUVDirEntType$fToValueUVDirEntType$fFromValueUVDirEntType$fShowTUVDirEntType$fReadDirEntType$fShowDirEntType$fEqDirEntType$fOrdDirEntType$fGenericDirEntType$fShowTDirEntType$fEncodeJSONDirEntType$fToValueDirEntType$fFromValueDirEntType$fShowUVTimeSpec$fReadUVTimeSpec$fEqUVTimeSpec$fOrdUVTimeSpec$fGenericUVTimeSpec$fShowTUVTimeSpec$fEncodeJSONUVTimeSpec$fToValueUVTimeSpec$fFromValueUVTimeSpec $fShowFStat $fReadFStat $fEqFStat $fOrdFStat$fGenericFStat $fShowTFStat$fEncodeJSONFStat$fToValueFStat$fFromValueFStat$fEqCopyFileFlag$fOrdCopyFileFlag$fShowCopyFileFlag$fGenericCopyFileFlag$fStorableCopyFileFlag$fUnalignedCopyFileFlag$fBitsCopyFileFlag$fFiniteBitsCopyFileFlag$fNumCopyFileFlag$fEncodeJSONCopyFileFlag$fToValueCopyFileFlag$fFromValueCopyFileFlag$fShowTCopyFileFlag$fEqAccessMode$fOrdAccessMode$fShowAccessMode$fGenericAccessMode$fStorableAccessMode$fUnalignedAccessMode$fBitsAccessMode$fFiniteBitsAccessMode$fNumAccessMode$fEncodeJSONAccessMode$fToValueAccessMode$fFromValueAccessMode$fShowTAccessMode$fShowAccessResult$fEqAccessResult$fOrdAccessResult$fGenericAccessResult$fShowTAccessResult$fEncodeJSONAccessResult$fToValueAccessResult$fFromValueAccessResult$fEqSymlinkFlag$fOrdSymlinkFlag$fShowSymlinkFlag$fGenericSymlinkFlag$fStorableSymlinkFlag$fUnalignedSymlinkFlag$fBitsSymlinkFlag$fFiniteBitsSymlinkFlag$fNumSymlinkFlag$fEncodeJSONSymlinkFlag$fToValueSymlinkFlag$fFromValueSymlinkFlag$fShowTSymlinkFlag$fEqUVHandleType$fOrdUVHandleType$fShowUVHandleType$fGenericUVHandleType$fStorableUVHandleType$fUnalignedUVHandleType$fEncodeJSONUVHandleType$fToValueUVHandleType$fFromValueUVHandleType$fShowTUVHandleType $fShowTimeVal $fReadTimeVal $fEqTimeVal $fOrdTimeVal$fGenericTimeVal$fShowTTimeVal$fEncodeJSONTimeVal$fToValueTimeVal$fFromValueTimeVal$fShowResUsage$fReadResUsage $fEqResUsage $fOrdResUsage$fGenericResUsage$fShowTResUsage$fEncodeJSONResUsage$fToValueResUsage$fFromValueResUsage$fEqPID$fOrdPID $fShowPID $fGenericPID $fStorablePID$fUnalignedPID$fEncodeJSONPID $fToValuePID$fFromValuePID $fShowTPID $fEqOSName $fOrdOSName $fShowOSName$fGenericOSName $fShowTOSName$fEncodeJSONOSName$fToValueOSName$fFromValueOSNameFilePtrFilereadFile writeFile newFilePtr getFileOffset setFileOffsetinitFilemkdirunlinkmkdtemprmdirscandirstatlstatfstatrenamefsync fdatasync ftruncatecopyfileaccesschmodfchmodutimefutimelutimelinksymlinkreadlinkrealpath $fOutputFile $fInputFile$fOutputFilePtr$fInputFilePtrUVStream uvsHandleuvsSlot uvsManager uvsClosed UVManager getUVManager getBlockMVarpokeBufferTablepeekBufferTable withUVManagerwithUVManager' getUVSlot withUVRequestwithUVRequest_withUVRequest'withUVRequestExforkBa initUVStream $fEqUVManager$fShowUVManager$fOutputUVStream$fInputUVStream$fShowUVStream StdStreamisStdStreamTTYstdinstdoutstderrstdinBuf 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$fShowConnectedUDPTCPServerConfig tcpListenAddrtcpListenBacklogtcpServerWorkerNoDelaytcpServerWorkerKeepAliveTCPClientConfig tcpClientAddr tcpRemoteAddrtcpClientNoDelaytcpClientKeepAlivedefaultTCPClientConfig initTCPClientdefaultTCPServerConfighelloWorldWorker echoWorkerstartTCPServer initTCPStream setTCPNoDelaysetTCPKeepAlivegetTCPSockNamegetTCPPeerNameIPCServerConfig ipcListenNameipcListenBacklogipcServerWorkerIPCClientConfig ipcClientName ipcTargetNamedefaultIPCClientConfig initIPCClientdefaultIPCServerConfigstartIPCServerFilePtrTFileT readFileT writeFileT newFilePtrT initFileT $fOutputFileT $fInputFileT$fOutputFilePtrT$fInputFilePtrT getAllEnvgetEnvgetEnv'setEnvunsetEnvgetResidentSetMemory getUpTimegetHighResolutionTime getResUsagegetPIDgetPPID getPriority setPriority getHostname getRandom getRandomT 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