!X_<       !"#$%&'()*+,-./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 [ \ ] ^ _ `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#{#|#}#~"""$$"###$$$###$$"$"""""""""""""""""""""""""%%%%&%&&%%&&&''&&&&&&''&&&&&&'&'&'&'&''''''''&&&&&&&&&&'&'&'&'&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& & & & & &&&&%'&%%''%%''&&&& &!&"&#&$&%&&&'&(&)&*&+&,&-&.&/&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+{+|+}+~++++++++++++++++++++++++++++++++,-+,,,---,,,---++++++++++++++++++++++++++,,,,,+++--+,,,---,,,--+-++,,,,,,,+                                  ! " # $ % & ' ( ) * + , - . / 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 0 0 0 0      %= Safe >?DEFOPQS SPQOFED?>Safer  Safe<=#$%&89]^_`abcdefghijklmnoptu~}|{zyxwvsrq<=ck`aedbjih&%$gf#onlmtu~}|{zyxwvsrqp^_]98 Safe''1Safed:                          SaferioLifted version of  55 Safe''!Safe2SafepSafe rio1Remove the suffix from the given list, if presentrio7Drop prefix if present, otherwise return original list.rio7Drop prefix if present, otherwise return original list.rio breaks a  up into a list of s at newline =s. It is very similar to $, but it also removes any trailing '\r' =s. The resulting - values do not contain newlines or trailing '\r' characters.riorioriorioriorioriorioriosuffixrioprefixriosuffixt      !"t"!       SafeSafem      "#$%&'()*+,-.0m0.-,+)(*'&%$#"      Safe; !/ /!Safe  SafeO7mnopqrstvwxyz{|}~7onm~}|{zyxwvqptsrSafe=uu Safe((2NoneMrio4A typeclass for values which can be converted to a V. The intention of this typeclass is to provide a human-friendly display of the data.rioDisplay data as , which will also be used for  if it is not overriden.riogA builder of binary data, with the invariant that the underlying data is supposed to be UTF-8 encoded.rioUse the 2* instance for a value to convert it to a .rio Convert a  into a .NOTE This function performs no checks to ensure that the data is, in fact, UTF8 encoded. If you provide non-UTF8 data, later functions may fail.rio Convert a  value into a strict .rio Convert a  value into a lazy . rioWrite the given  value to a file. !rio "rio #rio $rio %rio &rio 'rio (rio )rio *rio +rio ,rio -rio .rio /rio 0rio 1rio 2rio 3rio 4rio  3Safe^ rio,Lifted version of "System.Exit.exitFailure".@since 0.1.9.0. rio,Lifted version of "System.Exit.exitSuccess".@since 0.1.9.0. rio)Lifted version of "System.Exit.exitWith".@since 0.1.9.0.   4Safe rioApply a function to a V constructor rioGet a  5 value with a default fallback rio Applicative . rio        rioMonadic . rio        rioExtend  to allow side effects.Internally, this is implemented using a strict left fold. This is used for performance reasons. It also necessitates that this function has a Monad constraint and not just an  Applicative) constraint. For more information, see  Ghttps://github.com/commercialhaskell/rio/pull/99#issuecomment-394179757. rioStrip out duplicates rio0Run the second value if the first value returns U rio0Run the second value if the first value returns R rio-Helper function to force an action to run in JC. Especially useful for overly general contexts, like hspec tests.       5None3  6None,         7Safe  None@y#$%&'()*lkjihgfedcba`_+,-./0123456789:;<RU=>?@ABCDEFGSTHXYZIJKLMNOPVW[^4367 0|  :9     y<RU=HXYZ@ABCDKLMNOEFI?>GSTPVW43^J[%-#$2.5,'&/(10+7:;68)643*lkjihgfedcba`_97        0|:9None> :;<=>?@ABCDEFGHIJK     LMNOPQRSTUVWXY" !])*+,-./0215Z[\  !8                /+* .,-    021   KJIHGFEDCBA@?>=<;:YXWVUTSRQPONML\[Z ! " 5  )] !    88None| 6#$% &KJIHGFEDCBA@?>=<;:' ()*lkjihgfedcba`_+,  -   ./0YXWVUTSRQPONML123456! "789:;<RU=>?@ABCDEFGSTHXYZIJKLMNOPVW 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)*+,-./0214356 [ \ ] ^ _7Z[\ ` a b  0|   !:98 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                9None+( rio"Configuration for how to create a   . Intended to be used with the  7 function. rioCA logging function, wrapped in a newtype for better error messages.~An implementation may choose any behavior of this value it wishes, including printing to standard output or no action at all. rio+Environment values with a logging function. rioRWhere in the application a log message came from. Used for display purposes only. rioThe log level of a message. &rio Create a   from the given function. 'rio=Generic, basic function for creating other logging functions. (rio)Log a debug level message with no source. )rio)Log an info level message with no source. *rio(Log a warn level message with no source. +rio*Log an error level message with no source. ,rio=Log a message with the specified textual level and no source. -rio0Log a debug level message with the given source. .rio0Log an info level message with the given source. /rio/Log a warn level message with the given source. 0rio1Log an error level message with the given source. 1rioELog a message with the specified textual level and the given source. 2rioRWrite a "sticky" line to the terminal. Any subsequent lines will overwrite this one, and that same line will be repeated below again. In other words, the line sticks at the bottom of the output forever. Running this function again will replace the sticky line with a new sticky line. When you want to get rid of the sticky line, run  3.Note that not all  J implementations will support sticky messages as described. However, the  7. implementation provided by this module does. 3rioyThis will print out the given message with a newline and disable any further stickiness of the line until a new call to  2 happens. 4rio Create a  w value which will store its data in memory. This is primarily intended for testing purposes. This will return both a   value and an  V containing the resulting  value.This will default to non-verbose settings and assume there is a terminal attached. These assumptions can be overridden using the appropriate set functions. 5rio Create a   value from the given  7k and whether to perform verbose logging or not. Individiual settings can be overridden using appropriate set functions.When Verbose Flag is True, the following happens:setLogVerboseFormat is called with TruesetLogUseColor is called with True (except on Windows) setLogUseLoc is called with True setLogUseTime is called with TruesetLogMinLevel is called with Debug log level grio9Taken from GHC: determine if we should use Unicode syntax 6rioGiven a   value, returns both a new  % and a sub-routine that disposes it.:Intended for use if you want to deal with the teardown of  ! yourself, otherwise prefer the  7 function instead. 7rioGiven a  3 value, run the given function with the specified  '. A common way to use this function is: llet isVerbose = False -- get from the command line instead logOptions' <- logOptionsHandle stderr isVerbose let logOptions = setLogUseTime True logOptions' withLogFunc logOptions $ \lf -> do let app = App -- application specific environment { appLogFunc = lf , appOtherStuff = ... } runRIO app $ do logInfo "Starting app" myApp hrio7Replace Unicode characters with non-Unicode equivalents 8rioJSet the minimum log level. Messages below this level will not be printed.Default: in verbose mode,  ! . Otherwise,  ". 9rio Refer to  8Q. This modifier allows to alter the verbose format value dynamically at runtime.Default: in verbose mode,  ! . Otherwise,  ". :rio1Use the verbose format for printing log messages./Default: follows the value of the verbose flag. ;rio Refer to  :S. This modifier allows to alter the verbose format value dynamically at runtime./Default: follows the value of the verbose flag. <rio%Do we treat output as a terminal. If True0, we will enabled sticky logging functionality.Default: checks if the Handle provided to  5 is a terminal with  . =rio,Include the time when printing log messages. Default: U in debug mode, R otherwise. >rio'Use ANSI color codes in the log output. Default: U if in verbose mode and the  7 is a terminal device. ?rio$Use code location in the log output. Default: U if in verbose mode, R otherwise. @rio Convert a Q value into a ' indicating the first source location.4TODO Consider showing the entire call stack instead. irioThe length of a timestamp in the format "YYYY-MM-DD hh:mm:ss.". This definition is top-level in order to avoid multiple reevaluation at runtime. jrio_The number of Unicode characters in a UTF-8 encoded byte string, excluding ANSI CSI sequences. Ario/Is the log func configured to use color output?]Intended for use by code which wants to optionally add additional color to its log messages. Brio3Disable logging capabilities in a given sub-routinegIntended to skip logging in general purpose implementations, where secrets might be logged accidently. krio peforms no logging. lrio+Perform both sets of actions per log entry. ,riolevel 1riolevel 5rio Verbose Flag)Q      ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B:None3 Crio*Lazily get the contents of a file. Unlike  mW, this ensures that if an exception is thrown, the file handle is closed immediately. DrioWrite a file in UTF8 encoding8This function will use OS-specific line ending handling. FrioSame as  n, but generalized to  E GrioSame as  o, but generalized to  E HrioSRead a file in UTF8 encoding, throwing an exception on invalid character encoding.8This function will use OS-specific line ending handling. C D E F G H.NoneT8 I rioA  L specialized to boxed vectors. J rioA  L! specialized to storable vectors. K rioA  L specialized to unboxed vectors. L rioIA double-ended queue supporting any underlying vector type and any monad.FThis implements a circular double-ended queue with exponential growth. M rioSHelper function to assist with type inference, forcing usage of an unboxed vector. N rioSHelper function to assist with type inference, forcing usage of a storable vector. O rioPHelper function to assist with type inference, forcing usage of a boxed vector. P rioCreate a new, empty  L Q rioO(1)7 - Get the number of elements that is currently in the  L R rio.Pop the first value from the beginning of the  L S rio(Pop the first value from the end of the  L T rio)Push a new value to the beginning of the  L U rio#Push a new value to the end of the  L V rio Fold over a  L1, starting at the beginning. Does not modify the  L. W rio Fold over a  L+, starting at the end. Does not modify the  L. X rio Convert a  L" into a list. Does not modify the  L. Y rioqConvert to an immutable vector of any type. If resulting pure vector corresponds to the mutable one used by the  L#, it will be more efficient to use  Z instead.Example:set -XTypeApplications(import qualified RIO.Vector.Unboxed as U)import qualified RIO.Vector.Storable as Sd <- newDeque @U.MVector @Int mapM_ (pushFrontDeque d) [0..10]dequeToVector @S.Vector d[10,9,8,7,6,5,4,3,2,1,0] Z rioNYield an immutable copy of the underlying mutable vector. The difference from  Y? is that the the copy will be performed with a more efficient memcpy, rather than element by element. The downside is that the resulting vector type must be the one that corresponds to the mutable one that is used in the  L.Example:set -XTypeApplications(import qualified RIO.Vector.Unboxed as Ud <- newDeque @U.MVector @Int mapM_ (pushFrontDeque d) [0..10]freezeDeque @U.Vector d[10,9,8,7,6,5,4,3,2,1,0] I J K L M N O P Q R S T U V W X Y Z L K J I P Q R S T U V W X Y Z M N O;Noneb [rio!Helpful type synonym for using a  \ from an J -based stack. \rio)An unboxed reference. This works like an  V, but the data is stored in a bytearray instead of a heap object, avoiding significant allocation overhead in some cases. For a concrete example, see this Stack Overflow question:  dhttps://stackoverflow.com/questions/27261813/why-is-my-little-stref-int-require-allocating-gigabytes.PThe first parameter is the state token type, the same as would be used for the [ monad. If you're using an J+-based monad, you can use the convenience  [ type synonym instead. ]rio Create a new  \ ^rioRead the value in a  \ _rioWrite a value into a  \J. Note that this action is strict, and will force evalution of the value. `rioModify a value in a  \R. Note that this action is strict, and will force evaluation of the result value. [ \ ] ^ _ `<None =?@ACHMVs ario7Environment values with writing capabilities to SomeRef crio8Environment values with stateful capabilities to SomeRef erioBAbstraction over how to read from and write to a mutable reference frio.The Reader+IO monad. This is different from a  because:NIt's not a transformer, it hardcodes IO for simpler usage and error messages.Instances of typeclasses like  MonadLoggerb are implemented using classes defined on the environment, instead of using an underlying monad. irioJUsing the environment run in IO the action that requires that environment. jrio Abstract  f to an arbitrary  instance, which can handle IO. krioRead from a SomeRef lrioWrite to a SomeRef mrioYModify a SomeRef This function is subject to change due to the lack of atomic operations nriocreate a new boxed SomeRef oriocreate a new unboxed SomeRef prio5Identity state reference where the SomeRef is the env qrio5Identity write reference where the SomeRef is the env a b c d e f g h i j k l m n oNone2>SXS& prio&A convenience environment combining a   and a  y rrioGet the  y from the environment. trio5Exception type which may be generated in this module.NOTE8 Other exceptions may be thrown by underlying libraries! yrio"Context in which to run processes. rrioEnvironment variables as map srio)Environment variables as association list trio.List of directories searched for executables (PATH) urio,Cache of already looked up executable paths. vrio[""] on non-Windows systems, ["", ".exe", ".bat"] on Windows wrioOverride the working directory. zrioThe environment variable map {rio1Override the working directory processes run in. Nothing0 means the current process's working directory. |rio3Get the environment variables. We cannot provide a Lens= here, since updating the environment variables requires an IO action to allocate a new IORef' for holding the executable path cache. }rioGet the  z as an associated list of s.,Useful for interacting with other libraries. ~rio:Get the list of directories searched for executables (the PATH). Similar to  envVarMapL, this cannot be a full Lens. rio Create a new  y) from the given environment variable map. rioReset the executable cache. rio Load up an  EnvOverride from the standard environment. rio&Modify the environment variables of a  y.NThis will keep other settings unchanged, in particular the working directory.Note that this requires  E, as it will create a new  V for the cache. rioUse modifyEnvVarMap to create a new  y*, and then use it in the provided action. rio8Set the working directory to be used by child processes. xriocPerform pre-call-process tasks. Ensure the working directory exists and find the executable path. Throws a  t if unsuccessful.NOT CURRENTLY EXPORTED yrio=Log running a process with its arguments, for debugging (-v).GThis logs one message before running the process and one message after.NOT CURRENTLY EXPORTED rio Provide a  based on the  y in scope. Deals with resolving the full path, setting the child process's environment variables, setting the working directory, and wrapping the call with  y for debugging output.(This is intended to be analogous to the proc function provided by the System.Process.TypedH module, but has a different type signature to (1) allow it to perform IOW actions for looking up paths, and (2) allow logging and timing of the running action. rioSame as  z, but generalized to  . rioSame as  {, but generalized to  .  rioSame as  |, but generalized to  .  rioSame as  }, but generalized to  .  rioSame as  ~, but generalized to  .  rioSame as  , but generalized to  . rioRun an action using a  p' with default settings and no logging. rio4Execute a process within the configured environment.*Execution will not return, because either:t1) On non-windows, execution is taken over by execv of the sub-process. This allows signals to be propagated (#527)2) On windows, an ExitCode exception will be thrown. rioLike  , but does not use execvU on non-windows. This way, there is a sub-process, which is helpful in some cases ( 6https://github.com/commercialhaskell/stack/issues/1306).%This function only exits by throwing ExitCode. rio7Check if the given executable exists on the given PATH. rio*Find the complete path for the executable. rioAAugment the PATH environment variable with the given extra paths. rioApply   on the PATH value in the given  z. riorShow a process arg including speechmarks when necessary. Just for debugging purposes, not functionally important. xrio Command name yrio working dirjrio executablerio arguments riocommand to runriocommand line arguments rioName of executable rioName of executablerio'Full path to that executable on successYfghijklmnopqrstuvwxyz{|}~ p q r s t u v w x y z { | } ~  Y y r s z  { | } ~ p q t u v w x ~}|{zyxwvqputsronmlkjihgf/None+ rio0A simple, non-customizable environment type for RIOf, which provides common functionality. If it's insufficient for your needs, define your own, custom App data type. rioRun with a default configured  SimpleApp, consisting of:Logging to stderrIf the  RIO_VERBOSE9 environment variable is set, turns on verbose loggingDefault process context  SafeyR123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx|y{z~}U|y{zy{zwvqpo<XWutsrlnmkj~}ihgfedRQSNMLKJIHGFE4321bac_^`VU]\TDBCA@>?=ZPO[Y;x:98765SafeS33Safe!SafeSafe"#$%&'()*+,-.%&'()*"#$+,-.SafeF rio2Drop prefix if present, otherwise return original . rio2Drop prefix if present, otherwise return original . rio  breaks a  up into a list of s at newline =s. It is very similar to $, but it also removes any trailing '\r' characters. The resulting - values do not contain newlines or trailing '\r' characters. rioprefix riosuffixW W  =Nonen rio rio rio rio rio rio rio rio rio rio rio rio rio rio rio rio rio rio rio rio rio rio rio rio rio rio rio None3 6#$% &KJIHGFEDCBA@?>=<;:' ()*lkjihgfedcba`_+,  -   ./0YXWVUTSRQPONML123456! "789:;<RU=>?@ABCDEFGSTHXYZIJKLMNOPVWQ 7[\ 8 9 : ; < = > ? @ A B]^ D E F G H I J K L M N O P Q R S T U V W X Y Z)*+,-./0214356 [ \ ] ^ _7Z[\ ` a b  0|   !:98 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                           ! " # $ % & ' ( ) * + , - . / 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 f g h i j 7 6    5  8 9 : ; < = > ? ( ) * + , 2 3 - . / 0 1 ' & 4 ! " # $ % Q @ B A \  C F G H D E    a b c d e k l m n o \ [ ] ^ _ ` None rioLifted  rioLifted  rioLifted  rioLifted  rioLifted  m rioLifted  rioLifted  rioLifted  rioLifted  rioLifted  rioLifted  rioLifted  rioLifted  U  !"#$%&'()*+,-./0123456789:;<=@ABCGHIJKLMNRTUVWXYZ[\]^_ U ]\ZY[_^VUTRNXWMLK*JIHGCBA@;=<987:654321/0,+-.! #)('&$"% None rioLifted  rioLifted  rio Unlifted  rio Unlifted  rioLifted  rioLifted  rioLifted  rioLifted  rioLifted  n rioLifted  o rioLifted  rioLifted  rioLifted  rioLifted  rioLifted  rioLifted  rioLifted  rioLifted  rioLifted  [`abcdefghijklmnopqrstuvwxyz{|}~ [`abcdefghijklmnopqrstuvwxyz{|}~ 0None; riodReturns a low-level file descriptor for a directory path. This function exists given the fact that openFile does not work with directories.If you use this function, make sure you are working on a masked state, otherwise async exceptions may leave file descriptors open. rio Closes a   that points to a Directory. rio>Executes the low-level C function fsync on a C file descriptor rioKOpens a file from a directory, using this function in favour of a regular openFile guarantees that any file modifications are kept in the same directory where the file was opened. An edge case scenario is a mount happening in the directory where the file was opened while your program is running.If you use this function, make sure you are working on an masked state, otherwise async exceptions may leave file descriptors open. rioOpens a file using the openat C low-level API. This approach allows us to get a file descriptor for the directory that contains the file, which we can use later on to fsync the directory with.If you use this function, make sure you are working on an masked state, otherwise async exceptions may leave file descriptors open. rio*This sub-routine does the following tasks:WIt calls fsync and then closes the given Handle (mapping to a temporal/backup filepath)CIt calls fsync and then closes the containing directory of the file8These steps guarantee that the file changes are durable. rio*This sub-routine does the following tasks:WIt calls fsync and then closes the given Handle (mapping to a temporal/backup filepath)9It renames the file to the original path (using renameat)CIt calls fsync and then closes the containing directory of the fileThese steps guarantee that the file is durable, and that the backup mechanism for catastrophic failure is discarded after no error is thrown. rioAfter a file is closed, it opens it again and executes fsync internally on both the file and the directory that contains it. Note this function is intended to work around the non-durability of existing file APIs, as opposed to being necessary for the API functions provided in > module. Zhttps://stackoverflow.com/questions/37288453/calling-fsync2-after-close2/50158433#501584338The effectiveness of calling this function is debatable, as it relies on internal implementation details at the Kernel level that might change. We argue that, despite this fact, calling this function may bring benefits in terms of durability.Cross-Platform support-This function is a noop on Windows platforms. rio Similar to writeFileBinary, but it also ensures that changes executed to the file are guaranteed to be durable. It internally uses fsync and makes sure it synchronizes the file on disk.Cross-Platform support"This function behaves the same as ? on Windows platforms. rio Similar to writeFileBinary, but it also guarantes that changes executed to the file are durable, also, in case of failure, the modified file is never going to get corrupted. It internally uses fsync and makes sure it synchronizes the file on disk.Cross-Platform support"This function behaves the same as ? on Windows platforms. rio+Opens a file with the following guarantees:DIt successfully closes the file in case of an asynchronous exceptionIt reliably saves the file in the correct directory; including edge case situations like a different device being mounted to the current directory, or the current directory being renamed to some other name while the file is being used.RIt ensures durability by executing an fsync call before closing the file handleCross-Platform support"This function behaves the same as @A on Windows platforms. rio+Opens a file with the following guarantees:DIt successfully closes the file in case of an asynchronous exceptionIt reliably saves the file in the correct directory; including edge case situations like a different device being mounted to the current directory, or the current directory being renamed to some other name while the file is being used.RIt ensures durability by executing an fsync call before closing the file handleIt keeps all changes in a temporary file, and after it is closed it atomically moves the temporal file to the original filepath, in case of catastrophic failure, the original file stays unaffected.Performance Considerations)When using a writable but non-truncating  [ (i.e.  _ and  ^ ), this function performs a copy operation of the specified input file to guarantee the original file is intact in case of a catastrophic failure (no partial writes). This approach may be prohibitive in scenarios where the input file is expected to be large in size.Cross-Platform support"This function behaves the same as @A on Windows platforms. rio#Meta-description for error messagesrioC File Descriptor  Safe;|W;<=>?@ABCDEFGHIJKLMOPQRSTXYZ[\]^_`abcdefghijklmnopstuvx{|}~W~}|{xvutsponmlkjihgfedcba`_^]\Y[ZXSTRQPOMLKJIHGFEDBCA@?>=<;Safe>jNUVWqrwyzzywrqWVNUSafe?Safe?d     &%$#"! '()*.-,+/01234567<;:98=>?@AFEDCBGHKJIONMLPQRSTUVWXYZ[\]^_`abedc d     &%$#"! '()*.-,+/01234567<;:98=>?@AFEDCBGHKJIONMLPQRSTUVWXYZ[\]^_`abedc +NoneC !#$&()*+./01234589:;<=>?@ACDFGIJLMVWXYZ[\]^_aceghijklmnopqrstuvwxyz{|}~~}|{zyxwvutsrqponmlkjihgeca_^]\[ZYXWVMLJIGFDCA@?>=<;:98543210/.+*)(&$#! (NoneH"RTUXYZ]^_`abcdghijklmnoprsuvxy{|  (  |{yxvusrponmlkjihgdcba`_^]ZYX(TUR*NoneL#[\efqtwz}~   #   ~}zwtqfe\[)NoneMSVWWVS-NoneN#,-67BEHKNOPQRSTU`bdf#fdb`UTSRONQPKHEB76-,&NonePq7      !"#$%&'()*+,-./01234:;<?KMNOQP(qOQP7NMK?<;:43210! /.-,+*)('&%$#"     ('NoneS!=>CDEIJL!LJIEDC>=%NoneUz rioLifted version of  56789@ABFGH HGFBA@98765 "NoneVx   "$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPS`abcdefghijklmnopqrstuvwx~(~xwvutedcbasrqponmlkjihgf`SPONMLKJIHGFEDCBA@?>=<;:9875643210/.-,+*)('&%$"   ($None[n#   !#RWXY]^_#_^]YXWR#!   #None\QTUVZ[\yz{|}}|{zy\[ZVUTQ,None]"%''%"Safe^   /01234567   2345/0167 BCDEFGBHIBHJBKLBKMBCNBCOBCPBQRBQSBTUEVWEVXBQYBCZBC[BC\BC]BC^B_`BabBTcBTdBTeBTfBghBCiBCjBCkBClBCmBCnBCoBCpBqrBqsEVtBuvBTwBTxBCyBz{BC|BQ}EV~BBTBuBTBBBBaBCBBBBCBCEEEEEBBBBBBEBTEEBBBBBBEBBEBBEEEBBBBBzBzBzBzBzBzBzBzBzBzBzBzBzBzBBBBBBBBJBBBBBBBBBBBBIBBBBBBBBBBBBBBBBBBBBBOBBBBBBBBBBBBBBBgBgBgBg Bg Bg Bg Bg BgBgBgBgBBBBBBBBBBB_B_B_ B_!B"#B"$B"$B%&B%'B%(B)*B+,B-.B-/B-/B0B1B2B3B4B5B6B7B8B9B:B;B<B=B>B?B@BABBBCBDBEBFBBGBBHBIBJBKBLBMBNBOPBOQBORBOSBOBOTBOBOBOUBOVBOBOBOBOBOWBOXBOYBOZBO[BO\BO]BO^BO_BO`BOaBObBOcBOdBOeBOfBOgBOhBOiBOjBOBOBOBOkBOBOlBOmBOnBOoBOpBOqBOrBOBOBOsBOtBOBOuBOvBOwBOxBOyBOzB{|B{}B{~B{B{BBBBBBBBBBBBBBBBBBBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBuBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBTBT BT BT Bq Bq BqBqBqBqBBBBBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBHBB B!B"B#B$B%B&B'BK(BK)BQ*BQ+BQ,BQ-BQ.BC/BC0BC1BC2BC3BC4BC5BC6BC7BC8BC9BC:BC;BC<BC=BC>BC?BC@BCABCBBCCBCDBCEBCFBCGBCHBIJBIKBLEVMEVNEVOEVPEVQEVREVSEVTEVUEVVWXYWXZW[\W]^W_\W]`W]aW]bWcdW]eW]W]W]W]W]JW]fW]tW]yW]W]W]IW]1W]FW]uW]0W]vW]gW]wW]hW]xW]iW]kW]W]W]jW]kW]W]W]W]W]W]W]W]W]W]W]W]W]W]W]W]DW]EW]4W]5W]8W]9W]IW]W]HW]LW]JW]KW]W]W]W]OW]lW]W]W]W]W]W]mW]nW]W]W]GW]oW]pW]qW]rW]sW[tW[uWveWvWvWvWvWvWvJWvwWvsWvfWvtWvyWvWvWv0WvIWv1WvFWvuWvvWvgWvwWvhWvxWviWvkWvWvWvjWvkWvxWvWvyWvWvWvWvWvWvWvzWvWvWvWvWvWvWvWvWvDWvEWv4Wv5Wv8Wv9Wv{WvIWvWvHWv|WvLWvJWvKWvWvWvWvOWv`WvlWvWvWvWvWvWvmWvWvWvGWvrWvsWvaWvbWX}~~~~~~~~~~~~~~~~~~~O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~a~~~~~~~~~~~j~~~~~~~~~~~~~J~K~|~L~~~~~~~~~I~~~~~~~~~o~~~~~~~~~~~~~~~~~~v~r~b~~~~~~~~~G~p~~~~~~~~_~c~~~~J~~~~~~~~~~~I~~~~~~~~~~~~~~~~~~~~~~~~ ~ ~~~~~i~~~~~ ~ ~~G~ ~~~~~~~~~~a~b~~~~~~~~~~~~~~~~~~~~~~~~~~~~~v~~j~~~~~~~~~~J~K~|~L~ ~O~~I~~~o~~~~~~~~!~"~r~~a~b~~~~~~~~G~p~#$%&$%'$%($%)$%*+,-+,.+,/+,0123124+,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+,cdefghighjghkghlghmgnogpqgprgpsgptgpugpvwxywxz{|}{|~{|{|{|{|{|{{{{{{{{{{{wwwwwwwwwwwwwwwwwwwwwwwwwwwJgi0IfystPRQSjzzDE4589ILHJKkOG`mpoq^arstubefystPRSQJgviI0jzzDE4589ILHJKkOG`msarb       !""#$%&%'()(*(+(,-.-/-0-1-2-3-4-5-6789:9;9<9=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?@r?@s?@stuvtuwtuxtuytuz{|{|{|I{|L{|J{|{|{|O{|r{|{|{|{|G{|{|o{|}{|~{|a{|b{|{{{{{{{{{O{{{{{{{{{a{{{{I{{{L{{J{{{{o{r{{{{{{G{b{YaZb[cJe  2D3EBC6754{|ILJHKwxuv01FI  ]^_>?8O&9Dmz abGe  2D3EBC6754{|ILJHKwxuv01FI  ]^_>?8O&9Dmz abGe<  2D3EBC6754{|ILJHKwxuv01FI  YZ[abcJ]^_>?8O&9Dmz abG     e<  2D3EBC6754{|ILJHKwxuv01FIYZ[  abcJ]^_>?8O&9Dmz abG !f"#$%&'()*+,2-2.2/20202122232425263738394:4;4<4=4>4?4@4A4B4C4D5E6F6G6H6I6J6K6L6M6N7O7P9Q9R9S9T9U9V9W9X9Y9Z9[9\9]9^9_9`9a9b9c9d9e9f9g9h9i9j9k9l9m9n9o9p9q9r9s9t9u9v9w9x:y:z:{:|:?:}.~.................;;;;;;<<<<<<<<<<<<<<<////"#$===========================             00000%                        ttttt t!t"t#t$t%t&t't(t)t*t+t,t-tt.t/t0t1t2t3t4t5t6t7t8t9t:t;t<t=t>t?t@tAtBtCtDtE+,!2F2G2H2I2J2K2L2M2N2O2P2Q2R2S2T2U2V2W2X2YBZ[BC\B]^_`a_`b_`c_`d_`e_`f_`g_`h_`i_`j_`kBlmBnoBpqBprBstBsuBvBwBxByBzB%{B%{Bs|B]}B]~B]B]BBB%B+B+B+BBBBBBB+B+ttttttttttttttttttttttttutututututututututututututututtttttttttttttt t t t  t t t t t t t t t t t t t t t t t t t  t !t "t #t $t %t &t 't (t )t *t +t ,t -t .t /t 0t 1t 2t 3t 4t 5t 6t 7t 8t 9t :t ;t <t =t >t ?t @t At At Bt Ct Dt EtFGtFHtFItFJtFKtFLtFMtFNtFOtPQtPRtPStPTtPUtPVtPWtPXtPYtPZtP[tP\tP]tP^tP_tP`tPatPbtPctPdtPAtPetfgtfhtfitfjtfktfltfmtfntfotfptfqtfrtfstfttfutfvtfwtfxtfytfztf{tf|tf}tf~tftftftftftftftftftftftftftftftftftftftftftftftftftftftftftftftttttt999999W]WvWv<<?@?@?@?@?@?@W]W]W]W]W]W]W]W]W]W]W]W]WvWvWvWvWvWvWvWvWvWvWvWvWvWvWvWvWv00B00000#rio-0.1.10.0-73XOZIPlarp5aMN1v6aSgFRIO.List RIO.PreludeRIO.Prelude.TypesRIO.CharRIO RIO.NonEmptyRIO.NonEmpty.Partial RIO.FilePathRIO.List.PartialRIO.Char.Partial RIO.PartialRIO.ByteString.LazyRIO.ByteString.Lazy.PartialRIO.ByteStringRIO.ByteString.PartialRIO.Map.UncheckedRIO.MapRIO.Map.PartialRIO.SeqRIO.SetRIO.Set.PartialRIO.Set.Unchecked RIO.Writer RIO.State RIO.Text.LazyRIO.Text.Lazy.PartialRIO.TextRIO.Text.PartialRIO.Time RIO.Process RIO.HashSet RIO.HashMapRIO.HashMap.PartialRIO.Vector.UnboxedRIO.Vector.Unboxed.UnsafeRIO.Vector.Unboxed.PartialRIO.Vector.Storable.UnsafeRIO.Vector.StorableRIO.Vector.Storable.PartialRIO.Vector.BoxedRIO.Vector.Boxed.UnsafeRIO.Vector.Boxed.Partial RIO.VectorRIO.Vector.UnsafeRIO.Vector.Partial RIO.DequeRIO.Prelude.SimpleRIO.File RIO.DirectoryRIO.Prelude.DisplayRIO.Prelude.ExitRIO.Prelude.ExtraRIO.Prelude.LensRIO.Prelude.RenamesRIO.Prelude.TextRIO.Prelude.ReexportsRIO.Prelude.LoggerRIO.Prelude.IORIO.Prelude.URefRIO.Prelude.RIORIO.Prelude.TraceFilewriteFileBinary System.IOwithBinaryFilebaseGHC.Base++ghc-primGHC.PrimseqGHC.Listfilterzip Data.Tuplefstsnd otherwisemap$GHC.Num fromInteger-GHC.Real fromRational GHC.Classes==>=negatefail>>=>>fmapreturn Control.Arrowfirst Data.String fromString fromIntegral realToFrac toInteger toRational Control.Monadguard<>memptymappendmconcatjoin<*>pure*>GHC.EnumBoundedEnumEq GHC.FloatFloating FractionalIntegralMonad Data.DataDataFunctorNumOrdGHC.ReadReadReal RealFloatRealFracGHC.ShowShowData.Typeable.InternalTypeableControl.Monad.Fail MonadFailIsString Applicative Data.FoldableFoldableData.Traversable Traversable GHC.GenericsGeneric SemigroupMonoid GHC.TypesBoolCharDoubleFloatIntGHC.IntInt8Int16Int32Int64 integer-gmpGHC.Integer.TypeInteger GHC.NaturalNatural GHC.MaybeMaybeOrderingRationalIOWordGHC.WordWord8Word16Word32Word64 Data.EitherEitherGHC.Stack.Types CallStackFalseNothingJustTrueLeftRightLTEQGTGHC.STST GHC.Conc.SyncThreadId Data.VoidabsurdVoidgmapMogmapMpgmapMgmapQigmapQgmapQrgmapQlgmapT dataCast2 dataCast1 dataTypeOftoConstrgunfoldgfoldlData.List.NonEmptysortWithsortBy transposenubBynubunzipzipWith!! isPrefixOf groupAllWith1 groupWith1groupBy1group1 groupAllWith groupWithgroupBygroup partitionbreakspan dropWhile takeWhilesplitAtdroptakerepeatreversecycleiterate interspersescanr1scanl1scanrscanlsome1inserttailsinitstoListfromListsortcons<|initlasttailheadunfoldrunconsnonEmptyxorlengthmfilter<$!>unless replicateM_foldM_foldM zipWithM_zipWithMforever<=<>=>filterM Data.ListisSubsequenceOf mapAccumR mapAccumLforMforsequencemapM sequenceAtraverseControl.Applicativeoptional&&&***secondArrowData.Functor.Identity runIdentityIdentityGHC.IO.Exception ExitFailure ExitSuccessExitCodeGHC.IOFilePathGHC.Exception.Type ExceptionData.Functor.ConstgetConstConstfindnotElem minimumBy maximumByallanyorand concatMapconcatmsumasum sequence_ sequenceA_forM_mapM_for_ traverse_productsumminimummaximumelemnullfoldl1foldr1foldl'foldlfoldrfoldMapfold Data.OldListunwordswordsunlineslinessortOn permutations subsequencesdeleteFirstsByunzip7unzip6unzip5unzip4zipWith7zipWith6zipWith5zipWith4zip7zip6zip5zip4genericReplicate genericIndexgenericSplitAt genericDrop genericTake genericLengthinsertBy intercalate intersectBy intersectunionByunion\\deleteBydelete isInfixOf isSuffixOf findIndices findIndex elemIndices elemIndex stripPrefix dropWhileEnd Data.Char isSeparatorisNumberisMarkisLetter digitToInt Text.Readread readMaybeisRightisLeftpartitionEithersrightsleftseitherData.Ord comparingDown Data.ProxyProxyControl.Category>>>CategoryForeign.StorableStorable readLitChar lexLitCharatanhacoshasinhtanhcoshsinhatanacosasintancossinlogBase**sqrtlogexppiatan2isIEEEisNegativeZeroisDenormalized isInfiniteisNaN scaleFloat significandexponent encodeFloat decodeFloat floatRange floatDigits floatRadix byteSwap64 byteSwap32 byteSwap16 GHC.UnicodetoTitletoUppertoLowerisLowerisUpperisPrint isControl isAlphaNumisAlphaisSymbol isPunctuation isHexDigit isOctDigitisDigitisSpace isAsciiUpper isAsciiLowerisLatin1isAsciigeneralCategory NotAssigned PrivateUse SurrogateFormatControlParagraphSeparator LineSeparatorSpace OtherSymbolModifierSymbolCurrencySymbol MathSymbolOtherPunctuation FinalQuote InitialQuoteClosePunctuationOpenPunctuationDashPunctuationConnectorPunctuation OtherNumber LetterNumber DecimalNumber EnclosingMarkSpacingCombiningMarkNonSpacingMark OtherLetterModifierLetterTitlecaseLetterLowercaseLetterUppercaseLetterGeneralCategoryrunST Data.Boolbool Data.Function&onfix Data.Functorvoid$><&><$>lcmgcd^^^oddevendivModquotRemmoddivremquotrecip/floorceilingroundtruncateproperFractionmaxBoundminBoundfromEnumtoEnumpredsuccGHC.Charchr intToDigit showLitCharshowunzip3zipWith3zip3lookup replicatescanl'foldl1' Data.MaybemapMaybe catMaybes listToMaybe maybeToList fromMaybefromJust isNothingisJustmaybeuncurrycurrysubtractsignumabs*+asTypeOf$!flip.constidordliftM2liftMwhen=<<liftA3liftA<$<*liftA2manysome<|> Alternativemplusmzero MonadPlus:|NonEmptyStringGHC.Err undefinederror HasCallStack/=<=compare&&||not<>maxminbytestring-0.10.8.2Data.ByteString.Short.Internal fromShortShortByteStringData.ByteString.Lazy.Internal ByteStringData.ByteString.Lazy fromChunksData.ByteString.Internalappend singletonempty Data.ByteString.Builder.InternalBuildercopy stripSuffixcount elemIndexEndindexsplit splitWithunsnocsnoccons'toStrict fromStricttoChunksunpackpack foldlChunks foldrChunksData.ByteStringbreakSubstringspanEndbreakEndunfoldrNfoldr1'foldr'toShortcontainers-0.6.0.1Data.Map.Strict.InternalfromDistinctDescListfromDistinctAscListfromDescListWithKeyfromAscListWithKeyfromDescListWithfromAscListWith fromDescList fromAscListfromListWithKey fromListWithfromSet mapKeysWithmapAccumRWithKeymapAccumWithKeymapAccumtraverseWithKey mapWithKeymapEitherWithKey mapEithertraverseMaybeWithKeymapMaybeWithKey mergeWithKeyintersectionWithKeyintersectionWithdifferenceWithKeydifferenceWith unionWithKey unionWith unionsWithupdateMaxWithKeyupdateMinWithKey updateMax updateMinupdateAtalterFalterupdateLookupWithKey updateWithKeyupdate adjustWithKeyadjustinsertLookupWithKey insertWithKey insertWithfindWithDefault$Data.Map.Internal.DeprecatedShowTree showTreeWithshowTreeData.IntMap.InternalIntMapData.IntSet.InternalIntSetData.Map.Internal.DebugvalidData.Map.Internal splitRoot deleteFindMax deleteFindMin splitLookup toDescList toAscListkeysSetassocskeyselemsfoldMapWithKey foldlWithKey' foldlWithKey foldrWithKey' foldrWithKeymapKeysMonotonicmapKeyspartitionWithKey spanAntitonedropWhileAntitonetakeWhileAntitone filterWithKeyisProperSubmapOfByisProperSubmapOf isSubmapOfBy isSubmapOf restrictKeys intersection withoutKeys differenceunionsmaxViewminViewmaxViewWithKeyminViewWithKey deleteMax deleteMinfindMax lookupMaxfindMin lookupMindeleteAtelemAt lookupIndexlookupGElookupLElookupGTlookupLT notMembermembersize!?!MapData.Sequence.Internal.SortingunstableSortBy unstableSortData.Sequence.Internal findIndicesR findIndicesL findIndexR findIndexL elemIndicesR elemIndicesL elemIndexR elemIndexLbreakrbreaklspanrspanl dropWhileR dropWhileL takeWhileR takeWhileLfoldrWithIndexfoldlWithIndexchunksOf fromArray fromFunctiontraverseWithIndexfoldMapWithIndex mapWithIndexinsertAtadjust'viewrviewliterateNunfoldl><|> cycleTaking replicateM replicateAEmpty:<|:|>Seq:<EmptyLViewL:>EmptyRViewRData.Set.Internal splitMember mapMonotonic isSubsetOfisProperSubsetOfSetdeepseq-1.4.4.0Control.DeepSeqforce$!!deepseqrnfNFDatafilepath-1.4.2.1System.FilePath.Posix makeRelativedropTrailingPathSeparator normalise(exceptions-0.10.2-BCw4sZZBgaL5zRGtRt3vrKControl.Monad.CatchthrowM MonadThrow isAbsolute isRelative makeValidisValid equalFilePathjoinPathsplitDirectories splitPathcombinereplaceDirectory takeDirectoryaddTrailingPathSeparatorhasTrailingPathSeparatorreplaceBaseName takeBaseName takeFileName dropFileNamereplaceFileName splitFileNameisDrivehasDrive dropDrive takeDrive joinDrive splitDrivereplaceExtensionstakeExtensionsdropExtensionssplitExtensionsstripExtension isExtensionOf hasExtension addExtension dropExtension<.>replaceExtension-<.> takeExtensionsplitExtensionsplitSearchPathisExtSeparator extSeparatorisSearchPathSeparatorsearchPathSeparatorisPathSeparatorpathSeparators pathSeparator'hashable-1.3.0.0-1RsrIcitxVDKffGN1TuMlmData.Hashable.ClassHashable)microlens-0.4.11.1-5dh821ORebgAorhvJor7TN Lens.Microlensto^.setoverLens.Micro.InternalsetsLens.Micro.TypeASetterASetter' SimpleGetterGettingLensLens'transformers-0.5.5.0Control.Monad.Trans.Classlift MonadTrans mtl-2.2.2Control.Monad.Writer.Classcensorlistenspasslistentellwriter MonadWriterControl.Monad.State.Classgetsmodify'modifystateputget MonadStateControl.Monad.Reader.Classaskslocalask MonadReaderControl.Monad.Trans.ReaderReaderT runReaderTReader runReaderControl.Monad.Trans.State.LazyStateT runStateTStaterunState evalState execStatemapState withState evalStateT execStateT mapStateT withStateTControl.Monad.Trans.Writer.LazyWriterT runWriterTWriter runWriter execWriter mapWriter execWriterT mapWriterT(primitive-0.7.0.0-9xMM76CsovTEGnXCHiCdRJControl.Monad.Primitive primitive PrimState PrimMonad text-1.2.3.1Data.Text.LazycommonPrefixessplitOn breakOnAll breakOnEndbreakOnstripstripEnd stripStart dropAround takeWhileEnddropEndtakeEnd toCaseFoldreplacecenter justifyRight justifyLeft compareLengthData.Text.Internal.LazyText Data.TextData.Text.Encoding encodeUtf8encodeUtf8Builder decodeUtf8'decodeUtf8WithData.Text.ShowunpackCString#Data.Text.InternalData.Text.Encoding.Error lenientDecode EncodeError DecodeErrorUnicodeException time-1.8.0.2Data.Time.Format formatTimeNumericPadOptionformatCharacter FormatTimeData.Time.Format.Parse readsTimereadTime parseTime readPTime readSTimeparseTimeOrError parseTimeM buildTime ParseTime&Data.Time.LocalTime.Internal.ZonedTimezonedTimeToUTCutcToZonedTime zonedTimeZonezonedTimeToLocalTime ZonedTimeData.Time.Format.Localerfc822DateFormatiso8601DateFormatdefaultTimeLocaleknownTimeZones time12FmttimeFmtdateFmt dateTimeFmtamPmmonthswDays TimeLocale&Data.Time.LocalTime.Internal.LocalTimelocalTimeToUT1ut1ToLocalTimelocalTimeToUTCutcToLocalTimelocalTimeOfDaylocalDay LocalTime&Data.Time.LocalTime.Internal.TimeOfDaytimeOfDayToDayFractiondayFractionToTimeOfDaytimeOfDayToTimetimeToTimeOfDaylocalToUTCTimeOfDayutcToLocalTimeOfDaymakeTimeOfDayValidmiddaymidnighttodSectodMintodHour TimeOfDay%Data.Time.LocalTime.Internal.TimeZoneutctimeZoneOffsetStringtimeZoneOffsetString'hoursToTimeZoneminutesToTimeZone timeZoneNametimeZoneSummerOnlytimeZoneMinutesTimeZone Data.Time.Clock.Internal.UTCDiff diffUTCTime addUTCTime&Data.Time.Clock.Internal.UniversalTimegetModJulianDate ModJulianDate UniversalTime Data.Time.Clock.Internal.UTCTime utctDayTimeutctDayUTCTime#Data.Time.Clock.Internal.SystemTimegetTime_resolution(Data.Time.Clock.Internal.NominalDiffTime nominalDayNominalDiffTime!Data.Time.Clock.Internal.DiffTimediffTimeToPicosecondspicosecondsToDiffTimesecondsToDiffTimeDiffTimeData.Time.Calendar.GregorianaddGregorianYearsRollOveraddGregorianYearsClipaddGregorianMonthsRollOveraddGregorianMonthsClipgregorianMonthLength showGregorianfromGregorianValid fromGregorian toGregorianData.Time.Calendar.OrdinalDate isLeapYearData.Time.Calendar.DaysdiffDaysaddDaystoModifiedJulianDayModifiedJulianDayDay,typed-process-0.2.5.0-4BYOUpRzaSxBwPOf6GJwGRSystem.Process.TypedunsafeProcessHandle getStderr getStdoutgetStdincheckExitCodeSTM checkExitCodegetExitCodeSTM getExitCodewaitExitCodeSTM waitExitCode runProcess_ runProcessreadProcessStderr_readProcessStderrreadProcessStdout_readProcessStdout readProcess_ readProcess stopProcess startProcessuseHandleClose useHandleOpen createPipebyteStringOutputbyteStringInputclosedinherit mkStreamSpec setChildUser setChildGroup setNewSessionsetCreateNewConsolesetDetachConsolesetDelegateCtlcsetCreateGroup setCloseFds setStderr setStdoutsetStdin ProcessConfigSTOutputSTInput StreamType StreamSpecProcess eceStderr eceStdouteceProcessConfig eceExitCodeExitCodeExceptionByteStringOutputException&unliftio-0.2.11-3gfrR6LY9yfLhKAhh78x6QUnliftIO.ConcurrentisCurrentThreadBoundthreadWaitWritethreadWaitRead threadDelay myThreadId3unordered-containers-0.2.10.0-b9YJCQLkMeLUf311RZkQDData.HashSet.BasefromMaptoMapHashSetData.HashMap.Strict.BaseData.HashMap.Base lookupDefaultHashMap&vector-0.12.0.3-ChzWbiXyvuNAQj0dcU08SgData.Vector.Unboxed unsafeCopyfreezethaw unsafeThaw unsafeFreeze fromListNscanr1'scanr' postscanr' postscanr prescanr'prescanrscanl1' postscanl' postscanl prescanl'prescanlfold1M'_ifoldM'_foldM'_fold1M_ifoldM_fold1M'ifoldM'foldM'fold1MifoldM minIndexByminIndex maxIndexBymaxIndexifoldr'ifoldrifoldl'ifoldlunstablePartition imapMaybeifilteruniq izipWithM_ izipWithM izipWith6 izipWith5 izipWith4 izipWith3izipWithimapM_imapMimapindexedunsafeBackpermute backpermuteunsafeAccumulate_unsafeAccumulate unsafeAccum accumulate_ accumulateaccum unsafeUpdate_ unsafeUpdate unsafeUpdupdate_//createTcreate iterateNM generateMenumFromThenTo enumFromTo enumFromStepN enumFromN constructrN constructN unfoldrNMunfoldrMgenerate unsafeDrop unsafeTake unsafeTail unsafeInit unsafeSliceslice unsafeLastM unsafeHeadM unsafeIndexMlastMheadMindexM unsafeLast unsafeHead unsafeIndexData.Vector.Unboxed.BaseMV_UnitMV_IntMV_Int8MV_Int16MV_Int32MV_Int64MV_WordMV_Word8 MV_Word16 MV_Word32 MV_Word64MV_Float MV_DoubleMV_CharMV_Bool MV_ComplexMV_2MV_3MV_4MV_5MV_6MVectorVectorUnboxData.Vector.StorableunsafeToForeignPtr0unsafeToForeignPtrunsafeFromForeignPtr0unsafeFromForeignPtrData.Vector.Storable.Mutable Data.Vectoriscanr'iscanriscanl'iscanlData.Vector.MutableData.Vector.GenericdataCastmkType liftReadsPrecreadPrec liftShowsPrec showsPreccmpBycmpeqByeqclonenew unstreamRstreamRunstreamstreamconvertconcatNEData.Vector.Generic.BaseelemseqbasicUnsafeCopybasicUnsafeIndexMbasicUnsafeSlice basicLengthbasicUnsafeThawbasicUnsafeFreeze getSearchPath dropPrefix dropSuffixlinesCR headMaybe lastMaybe tailMaybe initMaybe maximumMaybe minimumMaybemaximumByMaybeminimumByMaybeDisplaydisplay textDisplay Utf8BuildergetUtf8Builder displayShowdisplayBytesUtf8utf8BuilderToTextutf8BuilderToLazyTextwriteFileUtf8Builder exitFailure exitSuccessexitWithmapLeft fromFirst mapMaybeA forMaybeA mapMaybeM forMaybeMfoldMapMnubOrdwhenMunlessMasIOviewLText LByteStringGVectorSVectorUVectorsappend toStrictBytesfromStrictBytes yieldThreadtshowdecodeUtf8Lenient LogOptionsLogFunc HasLogFunclogFuncL LogSourceLogLevel LevelDebug LevelInfo LevelWarn LevelError LevelOther mkLogFunc logGenericlogDebuglogInfologWarnlogErrorlogOther logDebugSlogInfoSlogWarnS logErrorS logOtherS logSticky logStickyDonelogOptionsMemorylogOptionsHandle newLogFunc withLogFuncsetLogMinLevelsetLogMinLevelIOsetLogVerboseFormatsetLogVerboseFormatIOsetLogTerminal setLogUseTimesetLogUseColor setLogUseLocdisplayCallStacklogFuncUseColorL noLogging withLazyFile writeFileUtf8 hPutBuilderreadFileBinary readFileUtf8BDequeSDequeUDequeDequeasUDequeasSDequeasBDequenewDeque getDequeSize popFrontDeque popBackDequepushFrontDeque pushBackDeque foldlDeque foldrDeque dequeToList dequeToVector freezeDequeIOURefURefnewURefreadURef writeURef modifyURef HasWriteRef writeRefL HasStateRef stateRefLSomeRefunRIOrunRIOliftRIO readSomeRef writeSomeRef modifySomeRef newSomeRefnewUnboxedSomeRefLoggedProcessContextHasProcessContextprocessContextLProcessException NoPathFoundExecutableNotFoundExecutableNotFoundAtPathsInvalidInPathProcessContextEnvVars workingDirLenvVarsLenvVarsStringsLexeSearchPathLmkProcessContext resetExeCachemkDefaultProcessContext modifyEnvVarswithModifyEnvVarswithWorkingDirproc withProcess withProcess_withProcessWaitwithProcessWait_withProcessTermwithProcessTerm_withProcessContextNoLoggingexec execSpawndoesExecutableExistfindExecutable augmentPathaugmentPathMapshowProcessArgDebug$fExceptionProcessException$fShowProcessException!$fHasProcessContextProcessContext'$fHasProcessContextLoggedProcessContext $fHasLogFuncLoggedProcessContext SimpleApp runSimpleApp$fHasProcessContextSimpleApp$fHasLogFuncSimpleApptracetraceIdtraceIOtraceM traceEvent traceEventIO traceMarker traceMarkerIO traceStack traceShow traceShowId traceShowIO traceShowMtraceShowEventtraceShowEventIOtraceShowMarkertraceShowMarkerIOtraceShowStack traceDisplaytraceDisplayIdtraceDisplayIO traceDisplayMtraceDisplayEventtraceDisplayEventIOtraceDisplayMarkertraceDisplayMarkerIOtraceDisplayStack getContentsputStrputStrLninteractreadFile writeFile appendFilehGet hGetContentshGetNonBlockinghPuthPutNonBlockinghPutStr packCStringpackCStringLen useAsCStringuseAsCStringLengetLinehGetLinehGetSomeensureFileDurablewriteBinaryFileDurablewriteBinaryFileDurableAtomicwithBinaryFileDurablewithBinaryFileDurableAtomicgetCurrentTime getTimeZonegetCurrentTimeZone getZonedTimeutcToLocalZonedTime unsafeWithdirectory-1.3.3.0System.Directory exeExtensionsetOwnerSearchablesetOwnerExecutablesetOwnerWritablesetOwnerReadableemptyPermissions System.Directory.Internal.Common Permissionsreadablewritable executable searchable XdgDirectoryXdgData XdgConfigXdgCacheUnliftIO.DirectorysetModificationTime setAccessTimegetModificationTime getAccessTimecopyPermissionssetPermissionsgetPermissionspathIsSymbolicLinkdoesDirectoryExist doesFileExist doesPathExist getFileSize findFilesWith findFileWith findFilesfindFilefindExecutablesInDirectoriesfindExecutablesmakeRelativeToCurrentDirectory makeAbsolutecanonicalizePathcopyFileWithMetadatacopyFile renamePath renameFile removeFilegetTemporaryDirectorygetUserDocumentsDirectorygetAppUserDataDirectorygetXdgDirectorygetHomeDirectorywithCurrentDirectorysetCurrentDirectorygetCurrentDirectorygetDirectoryContents listDirectoryrenameDirectoryremovePathForciblyremoveDirectoryRecursiveremoveDirectorycreateDirectoryIfMissingcreateDirectory$fIsStringUtf8Builder$fDisplayProcessConfig$fDisplayIOException$fDisplaySomeException$fDisplayWord64$fDisplayWord32$fDisplayWord16$fDisplayWord8 $fDisplayWord$fDisplayInt64$fDisplayInt32$fDisplayInt16 $fDisplayInt8 $fDisplayInt$fDisplayFloat$fDisplayInteger $fDisplayChar $fDisplayText$fDisplayText0$fDisplayUtf8Builder Data.MonoidFirstassertGHC.IO.Handle.TypesHandle"async-2.2.2-JNOgs3QkEuXLm97AkAPhACControl.Concurrent.Async waitBothSTMwaitEitherSTM_ waitEitherSTMwaitEitherCatchSTM waitAnySTMwaitAnyCatchSTMpollSTM waitCatchSTMwaitSTMAsync asyncThreadIdControl.ConcurrentrtsSupportsBoundThreadsControl.Concurrent.ChanChanControl.Monad.IO.ClassMonadIOliftIOGHC.IO.Handle.FDstderrstdin writeTVarreadTVarnewTVarSTMTVarSomeAsyncExceptionstdout BufferMode NoBuffering LineBufferingBlockBuffering GHC.IO.DeviceSeekMode GHC.IORefIORef IOException toException fromExceptiondisplayException GHC.IO.IOModeIOModeReadMode WriteMode AppendMode ReadWriteModeGHC.MVarMVar SomeException stm-2.5.0.0Control.Concurrent.STM.TVarswapTVar modifyTVar' modifyTVarControl.Concurrent.STM.TQueue isEmptyTQueue unGetTQueue tryPeekTQueue peekTQueue tryReadTQueue readTQueue writeTQueue newTQueueTQueueControl.Concurrent.STM.TMVar isEmptyTMVar swapTMVar tryReadTMVar readTMVar tryPutTMVarputTMVar tryTakeTMVar takeTMVar newEmptyTMVarnewTMVarTMVarControl.Concurrent.STM.TChan cloneTChan isEmptyTChan unGetTChandupTChan tryPeekTChan peekTChan tryReadTChan readTChan writeTChannewBroadcastTChannewTChanTChanControl.Concurrent.STM.TBQueue isFullTBQueueisEmptyTBQueue unGetTBQueuetryPeekTBQueue peekTBQueuetryReadTBQueue readTBQueue writeTBQueue newTBQueueTBQueue,unliftio-core-0.1.2.0-6l4GP0ylCTM6crlVTDgRiKControl.Monad.IO.Unlift MonadUnliftIO askUnliftIO withRunInIOUnliftIOunliftIO askRunInIO withUnliftIOtoIOwrappedWithRunInIOUnliftIO.TimeouttimeoutUnliftIO.TemporarywithTempDirectory withTempFilewithSystemTempDirectorywithSystemTempFile UnliftIO.STM newTBQueueIO newTQueueIOnewBroadcastTChanIO newTChanIO mkWeakTMVarnewEmptyTMVarIO newTMVarIO mkWeakTVar registerDelay readTVarIO newTVarIOcheckSTMretrySTM atomicallyUnliftIO.Memoize memoizeMVar memoizeRef runMemoizedMemoizedmkWeakThreadIdrunInUnboundThreadrunInBoundThreadforkOSyieldthreadCapabilitysetNumCapabilitiesgetNumCapabilitiesforkOnWithUnmaskforkOn killThread forkFinallyforkWithUnmaskforkIOWithUnmaskforkIO UnliftIO.MVar mkWeakMVarmodifyMVarMaskedmodifyMVarMasked_ modifyMVar modifyMVar_withMVarMaskedwithMVar tryReadMVar isEmptyMVar tryPutMVar tryTakeMVarswapMVarreadMVarputMVartakeMVarnewMVar newEmptyMVarUnliftIO.Internals.AsyncpooledReplicateConcurrently_pooledReplicateConcurrentlyN_pooledReplicateConcurrentlypooledReplicateConcurrentlyNpooledForConcurrentlyN_pooledForConcurrently_pooledMapConcurrently_pooledMapConcurrentlyN_pooledForConcurrentlypooledForConcurrentlyNpooledMapConcurrentlypooledMapConcurrentlyNrunConcconcmapConcurrently_mapConcurrentlyreplicateConcurrently_replicateConcurrentlyforConcurrently_forConcurrently concurrently_ concurrentlyrace_racelink2linkwaitBoth waitEither_waitEitherCatchCancelwaitEitherCancelwaitEitherCatch waitEitherwaitAnyCatchCancel waitAnyCancel waitAnyCatchwaitAny cancelWithuninterruptibleCancelcancel waitCatchpollwaitwithAsyncOnWithUnmaskwithAsyncWithUnmask withAsyncOnwithAsyncBound withAsyncasyncOnWithUnmaskasyncWithUnmaskasyncOn asyncBoundasync ConcurrentlyrunConcurrentlyConc ConcExceptionEmptyWithNoAlternativeUnliftIO.IORef mkWeakIORefatomicWriteIORefatomicModifyIORef'atomicModifyIORef modifyIORef' modifyIORef writeIORef readIORefnewIORef UnliftIO.IOgetMonotonicTimehReady hWaitForInputhGetEchohSetEchohIsTerminalDevice hIsSeekable hIsWritable hIsReadable hIsClosedhIsOpenhTellhSeek hGetBuffering hSetBufferinghIsEOF hSetFileSize hFileSizehFlushhClosewithFileUnliftIO.Exception fromEitherM fromEitherIO fromEither impureThrowthrowTostringException throwStringuninterruptibleMask_mask_uninterruptibleMaskmaskisAsyncExceptionisSyncExceptiontoAsyncExceptiontoSyncExceptionthrowIO onException withExceptionfinallybracketOnError_bracketOnErrorbracket_bracket evaluateDeepevaluate catchesDeepcatches pureTryDeeppureTrytryJust tryAnyDeeptryDeeptryAnytryIOtry handleJust handleAnyDeep handleDeep handleAnyhandleIOhandle catchJust catchAnyDeep catchDeepcatchAnycatchIOcatchHandlerSyncExceptionWrapperAsyncExceptionWrapperStringException UnliftIO.ChanwriteList2ChangetChanContentsdupChanreadChan writeChannewChangetCanUseUnicodereplaceUnicodetimestampLengthutf8CharacterCount$fMonoidLogFunc$fSemigroupLogFunc$fHasStateRefaSomeRef$fHasWriteRefaSomeRef pcTextMap pcStringListpcPath pcExeCachepcExeExtensions pcWorkingDir preProcesswithProcessTimeLogopenDircloseDirectorySystem.Posix.TypesFdfsyncFileDescriptoropenFileFromDiropenFileAndDirectorycloseFileDurablecloseFileDurableAtomic