!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Safe0:ALT[#5Indicates that some string was not able to be parsed.)A REPL command, possibly with parameters.2The short name of the command. Purely informative.YReturns whether the first part of an input (the command name) matches a the command. defCommandTest is appropriate for most cases.A description of the command.TRuns the command with the input text as parameter, returning the unconsumed input.jToo few parameters were given to a command. The first value is the minium, the second the actual number. lToo many parameters were given to a command. The first value is the maximum, the second the actual number. The input of a command was malformed and could not be interpreted. I.e. the input contained inadmissible characters, or quotes were mismatched. The Text$ argument contains the parser error.+Generic error related to command execution.CIndicates that the last existing portion of a path is not writable.(Indicates that no part of a path exists.CIndicates whether the target of a path exists and what form it has.A verbatim Text whose Read instance simply returns the read string, as-is. This is useful for askers which ask for strings without quotes.0A generic predicate failure for use with Askers.+A generic type failure for use with Askers./The input for an Asker was aborted by the user.!$The parsed value failed a predicate.#The input could not be parsed.%Generic error related to *Xs. Either the input was incorrect in some way, or the process was aborted by the user.' Root of the exception hierarchy.)QAn Asker which does not convert its argument into a different type after parsing.*gThe description of an 'ask for user input'-action. The type parameters are the used monad (typically  or ExceptT_), the type of the read value and the type of the error that is thrown in case of failures.iThe components are a prompt, a parser, and a predicate that the parsed value must fulfil. The predicateis monadic andJcan change the returned type (useful for adjoining additional information),'The prompt to be displayed to the user.-The parser for the input value..\The predicate which the input, once read, must fulfill. The Left side is an error message./AA parser which either returns a parsed value or an error message.08A predicate which does not change the type of its input.1(A predicate which a value has to fulfil.2 A prompt.3<An error message indicating that a value failed a predicate.4BAn error message indicating that a value wasn't able to be parsed.9Constructor for  which wraps the value into a .:Constructor for  which wraps the value into a .HRead-instance for 7. Wraps the given value into quotes and reads it a a .R  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ=  !"#$%&'()*+,-./0123456789:;=6    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQSafe0:ALT[o7Extracts a result from the current state. Defined as get1 f = liftM f get.p,Extracts two results from the current state.q.Extracts three results from the current state.r-Extracts four results from the current state.s-Extracts five results from the current state.t,Extracts six results from the current state.u.Extracts seven results from the current state.v.Extracts eight results from the current state.opqrstuvopqrstuvopqrstuvopqrstuvNone0:ALT[wPrints a string to stderr.x<Prints a string, followed by a newline character, to stderr.yPrints > # and asks the user to input a line.zQPrints its first argument and, in the same line, asks the user to input a line.{SThe same as prompt, but aborts as soon as the user presses a given key (commonly '\ESC'R). This function temporarily tries to set the buffering mode to NoBuffering via 9, which may not be supported. See the documentation of  for details.wxyz{wxyz{wxyz{wxyz{None0:ALT[ Creates a NoParseError out of a .| Variant of ~ that uses  and  for (de)serialization.+If the file's content's can't be parsed, a  NoParseError will be thrown.} Variant of ~& that uses JSON for (de)serialization.+If the file's content's can't be parsed, a  NoParseError will be thrown.~Tries to read a configuration from file. If the file is missing, a default instance is written to file and returned. The following exceptions may be thrown: IOException_, if the IO operations associated with reading or creating the configuration file fail, andAn exception of type eL if the configuration file is present, but its contents can't be parsed.|}~Path of the configuration file.Parser for the file's contents.Encoder for the default value. If the given configuration file does not exist, a default value will be serialized using this function.|}~~}||}~None0:ALT[ Creates an *. which only cares about the type of the input.YAn asker which asks for an optional value. If only whitespace is entered (according to ), it returns O without further parsing or checking; otherwise, it behaves identically to .A parser based on 5. This suffices for the parsing of most data types.Creates a general * with  as its parser. Using   is perfectly fine for most values, keep in mind that the input Text has to be unpacked into a string. This can be costly on very large inputs.NOTE: Instances of String/Text have to be surrounded with quotes ("). You practically never want this when asking for input. If you want to get the user input as-is, restrict the return type to Asker m Verbatim or use 'predAsker'/'lineAsker'. Creates an *< based on Read which just cares about the type of the input. Creates an *# which takes its input verbatim as Textm. Quotes around the input are not required. The input thus only has to pass a predicate, not any parsing.A wrapper around 4. Prints no prompt and returns the user input as-is.8An asker based on Read which asks for an optional value.Executes an Asker. A %e is thrown if the inpout can't be parsing into a value of the correct type, if the input fails the )/s predicate, or if the escape key is pressed.See $. Always reads the input from stdin. ask' a = ask a Nothing  Executes an *Z. If the Text argument is Nothing, the user is asked to enter a line on stdin. If it is Just x, x is taken to be input."Pressing the escape key returns a AskerInputAborterError (if supported).nRepeatedly executes an ask action until the user enters a valid value. Error messages are printed each time.ACreates a predicate from a boolean function and an error message.(Asks the user for a file or a directory.&Parsing checks for basic validity via  . Invalid paths are rejected.After that, the asker determines whether the target exists and what type it has. You can run a predicate on that information.See . This *H also ensures that the given path is writeable in the following sense:1at least some initial part of the path exists and0the last existing part of the path is writeable. and P exceptions are thrown if the first or second of these conditions is violated.IFor relative paths, we only check that the current directory is writable.Handled exceptions:  4!"#$%&'()*+,-./012349:424310/*+,-.)'(%&#$!"9:None0:ALT[uRuns the command with the input text as parameter, discarding any left-over input. The command test is disregarded. Can throw: URuns the command with the input text as parameter. The command test is disregarded. Can throw:  ", if any input is left unconsumed.Note:   will only be thrown after the command's execution is attempted. This is because of the subcommand mechanism, which prevents the static determination of the number of required arguments.2Runs the command with the input text as parameter.xThe first parameter (or the empty string, if no input was given) is passed to the command test. If it fails the test,  is returned. Can throw:  ", if any input is left unconsumed. Takes a list xs2 and executes the first command in a list whose  matches the input. Note that the resultant command cs ) should only be executed with an input t& if 'commandTest c t' == True', where t' is either head (readArgs t) or mempty if t0 is empty. Otherwise, the result is undefined.Adds a list of possible subcommands after a command (that should leave some input unconsumed). Ignoring all the required parameters for a moment,  subcommand x xs = x >>- oneOf xsLSplits and trims the input of a command. If the input cannot be parsed, a   exception is thrown.Format Any non-whitespace sequence of characters is interpreted as one argument, unless double quotes (") are used, in which case they demarcate an argument. Each argument is parsed as a haskell string literal (quote-less arguments have quotes inserted around them).$Arguments are parsed using parsec's  stringLiteralc (haskell-style), meaning that escape sequences and unicode characters are handled automatically.XGets the first part of a command string. Returns Nothing if the string is empty or if  throws a  .EThe "default" command test for making commands. This function uses  to extract the first part of the user input, stripping whitespace and also checking whether the entire input is well-formed.gSurrounds an argument in quote marks, if necessary. This is useful when arguments were extracted via k, which deletes quote marks. Quotes are placed around the input iff it is empty or contains whitespace.%Creates a command without parameters.%Creates a command with one parameter.&Creates a command with two parameters.(Creates a command with three parameters.'Creates a command with four parameters.'Creates a command with five parameters.&Creates a command with six parameters.(Creates a command with seven parameters.(Creates a command with eight parameters.>Creates a command with a list of parameters. The first list necc of *bs indicates the necessary parameters; the user must at least provide this many. The second list opt contains *ks for additional, optional parameters, and may be infinite. If the number of passed parameters exceeds length necc + length opt , or if any *! fails, the command returns an  AskFailure.<Prints out a list of command names, with their descriptions. Throws a ? if the length of the list is smaller than the second argument. Wrapper for .iRuns a REPL based on a set of commands. For a line of input, the commands are tried in following order:the "exit" command,all regular commands, and thenthe "unknown" command. A variant of  with some default settings:The "exit" command is .5Commands consistining only of whitespace are ignored./The "unknown" command prints "Unknown command:  userinput".The prompt is "> ".The error handler is .3A command that takes no arguments and does nothing.fA command with the name ":exit" and the description "Exits the program." Otherwise, it does nothing.)You can use this as the exit-command for 3, if no special clean-up is needed upon quitting.SA help-command with the name ":help" and the description "Prints this help text."]It goes through the given list of commands and prints the name and description of each one.%A default error handler that catches ' and prints it to stdout.AFor the following errors, we print a user-friendly error message:  (when wrapped in an #), (when wrapped in an !), (when wrapped in an !), (when wrapped in an !), (when wrapped in an !),, , ,,.For every other subtype of '", we just print the Show-instance.Useful in combination with . Command name.Command description.The root command.=The subcommands that may follow it. This list must be finite.-Command names, including permissible aliases. User input. Command name. Command test.Command description.Command function. It will receive the first part of the input (customarily the command name), or the empty string if the input only contained whitespace. Command name. Command test.Command descriptionWhether the command can ask for input. If True, running the command will run the Asker's IO action if not enough input is provided. If False a  will be thrown.* for the first parameter.Command function. Command name. Command test.Command description&Whether the command can ask for input.* for the first parameter.* for the second parameter.Command function. Command name. Command test.Command description&Whether the command can ask for input.* for the first parameter.* for the second parameter.* for the third parameter.Command function.  Command name. Command test.Command description&Whether the command can ask for input.* for the first parameter.* for the second parameter.* for the third parameter.* for the fourth parameter.Command function.  Command name. Command test.Command description&Whether the command can ask for input.* for the first parameter.* for the second parameter.* for the third parameter.* for the fourth parameter.* for the fifth parameter. Command function.  Command name. Command test.Command description&Whether the command can ask for input.* for the first parameter.* for the second parameter.* for the third parameter.* for the fourth parameter.* for the fifth parameter. * for the sixth parameter. Command function.  Command name. Command test.Command description&Whether the command can ask for input.* for the first parameter.* for the second parameter.* for the third parameter.* for the fourth parameter.* for the fifth parameter. * for the sixth parameter. * for the seventh parameter. Command function.  Command name. Command test.Command description&Whether the command can ask for input.* for the first parameter.* for the second parameter.* for the third parameter.* for the fourth parameter.* for the fifth parameter. * for the sixth parameter. * for the seventh parameter. * for the eighth parameter. Command function. Command name. Command test.Command descriptionTWhether the command can ask for input. This only affects the necessary parameters.*s for the necessary parameters.*s for the optional parameters.The regular commands.-The "exit" command which terminates the loop.GThe command that is called when none of the others match. This one's  is replaced with  const True.;The asker to execute before each command (i.e. the prompt).YList of Handlers for any exceptions that may arise. The exception hierchy is rooted in '. See System.REPL.Types.eAsks the user repeatedly for input, until the input matches the command test of the "exit" command. Command name.jAlternative names for the command. The user can either the command name or any of the alternative names.1E.g. "exit" with alternative names ":e", ":quit".* '(*'(  None0:ALT[a !"#$%&'()*+,-./012349:|}~ !!"##$$%%&&''(())*++,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ +repl-toolkit-1.1.0.0-3uY4K7IWkag3KsYof30zwFSystem.REPL.TypesSystem.REPL.StateSystem.REPL.PromptSystem.REPL.ConfigSystem.REPL.AskSystem.REPL.Command System.IO hSetBuffering Data.Read readMaybeSystem.FilePathisValidSystem.IO.ErrorisPermissionErrorisDoesNotExistError System.REPLNoConfigFileParseErrorCommand commandName commandTest commandDescrunPartialCommandTooFewParamsErrorTooManyParamsErrorMalformedParamsErrorSomeCommandErrorPathIsNotWritablePathRootDoesNotExistPathExistenceType IsDirectoryIsFile DoesNotExistVerbatim fromVerbatimGenericPredicateErrorGenericTypeErrorAskerInputAbortedErrorAskerPredicateErrorAskerTypeErrorSomeAskerError SomeREPLErrorAsker'Asker askerPrompt askerParseraskerPredicateParser Predicate' Predicate PromptMsgPredicateError TypeErrorreplErrorUpcastreplErrorDowncastaskerErrorUpcastaskerErrorDowncastgenericTypeErrorgenericPredicateErrorcommandErrorUpcastcommandErrorDowncast!$fExceptionNoConfigFileParseError $fBindCommand$fApplyCommand$fFunctorCommand$fExceptionTooFewParamsError$fExceptionTooManyParamsError$fExceptionMalformedParamsError$fExceptionSomeCommandError$fShowSomeCommandError$fExceptionPathIsNotWritable$fExceptionPathRootDoesNotExist$fReadVerbatim $fExceptionGenericPredicateError$fExceptionGenericTypeError!$fExceptionAskerInputAbortedError$fExceptionAskerPredicateError$fExceptionAskerTypeError$fExceptionSomeAskerError$fShowSomeAskerError$fExceptionSomeREPLError$fShowSomeREPLError$fShowAskerTypeError$fShowAskerPredicateError$fShowAskerInputAbortedError$fShowGenericTypeError$fEqGenericTypeError$fShowGenericPredicateError$fEqGenericPredicateError$fEqPathExistenceType$fShowPathExistenceType$fOrdPathExistenceType$fReadPathExistenceType$fEnumPathExistenceType$fBoundedPathExistenceType$fEqPathRootDoesNotExist$fShowPathRootDoesNotExist$fEqPathIsNotWritable$fShowPathIsNotWritable$fShowMalformedParamsError$fEqMalformedParamsError$fOrdMalformedParamsError$fShowTooManyParamsError$fEqTooManyParamsError$fOrdTooManyParamsError$fShowTooFewParamsError$fEqTooFewParamsError$fOrdTooFewParamsError$fShowNoConfigFileParseError$fEqNoConfigFileParseError$fReadNoConfigFileParseErrorget1get2get3get4get5get6get7get8putErrputErrLnpromptprompt' promptAbortreadConfigShowreadConfigJSONreadConfigFile typeAskerP maybeAskerP readParserasker typeAsker predAsker lineAsker maybeAskeraskask' askEither untilValid boolPredicate filepathAskerwritableFilepathAsker runCommandrunSingleCommandrunSingleCommandIfoneOf subcommandreadArgsgetNamedefCommandTestquoteArg makeCommand makeCommand1 makeCommand2 makeCommand3 makeCommand4 makeCommand5 makeCommand6 makeCommand7 makeCommand8 makeCommandNsummarizeCommandsmakeREPLmakeREPLSimplenoOpCmd defExitCmd defHelpCmddefErrorHandlerghc-prim GHC.TypesIObase GHC.Exception SomeException#text-1.2.2.1-9Yh8rJoh8fO2JMLWffT3QsData.Text.InternalText#ListLike-4.5-3g6MY2hojKV91K6cugZ47cData.ListLike.IO ListLikeIO hGetContentshGethGetNonBlockinginteracthGetLinehPutStr hPutStrLngetLine getContentsputStrputStrLnreadFile writeFile appendFile noParseErrorGHC.IOFilePathGHC.ShowShowGHC.ReadRead GHC.UnicodeisSpaceGHC.BaseNothing Text.Read checkParamNumaskC++