úÎ#% î+      !"#$%&'()*None24JKEuse :& to construct arbitrary length tuples of any parsable argumentsQa class for tuples of types that can be parsed from the entire list of argumentsyusageFor's argument will usually be undefined, so when defining instances of Arguable, it should be lazy in its argument5a wrapper type to indicate a non-greedy list or maybePa class for types that can be parsed from some number of command line arguments xargName's argument will usually be undefined, so when defining instances of Arguable, it should be lazy in its argument Ka class for types that can be parsed from exactly one command line argument uname's argument will usually be undefined, so when defining instances of Arguable, it should be lazy in its argumentcparse the desired argument tuple from the command line or print a simple usage statment and quittread args from the given strings or print a simple usage statment and quit (so you can do option parsing first) use () for no arguments!Emake sure strings are handled as a separate type, not a list of chars"<use NonGreedy when it should be parsed non-greedily (e.g. @(NonGreedy xs :: NonGreedy [] Int, x :: Maybe Float) <- readArgs)#@use a list when it should be parsed from zero or more (greedily)$>use Maybe when it should be parsed from one or zero (greedily)%5use the arguable tyep to just parse a single argument&Tchar is a special case, so that we don't force the user to single-quote their input'XFilePath is a special case, so that we don't force the user to double-quote their input(TText is a special case, so that we don't force the user to double-quote their input)Vstring is a special case, so that we don't force the user to double-quote their input*Hall types that are typeable and readable can be used as simple arguments+  !"#$%&'()* + *)('& %$#"! "   !"#$%&'()*+      !"#$%&'()*+ReadArgs-1.2.2ReadArgs:& ArgumentTuple parseArgsFromusageFor NonGreedy unNonGreedyArgumentparseArgargNameArguableparsenamereadArgs readArgsFrom$fArgumentTuple(,,,,,,,,,,,,,,)$fArgumentTuple(,,,,,,,,,,,,,)$fArgumentTuple(,,,,,,,,,,,,)$fArgumentTuple(,,,,,,,,,,,)$fArgumentTuple(,,,,,,,,,,)$fArgumentTuple(,,,,,,,,,)$fArgumentTuple(,,,,,,,,)$fArgumentTuple(,,,,,,,)$fArgumentTuple(,,,,,,)$fArgumentTuple(,,,,,)$fArgumentTuple(,,,,)$fArgumentTuple(,,,)$fArgumentTuple(,,)$fArgumentTuple(,)$fArgumentTuplea$fArgumentTuple:&$fArgumentTuple() $fArgument[]$fArgumentNonGreedy $fArgument[]0$fArgumentMaybe $fArgumenta$fArguableChar$fArguableFilePath$fArguableText $fArguable[] $fArguablet