TPJ{      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~1Operations we can perform while pretty printing. Introduce a level of parens. Introduce a level of braces. Move to newline. Add a word to a line. Remove and indentation level. Indent by N spaces. GState of pretty printing -- string being built, indent levels, present  column, brace nesting.  ;Produce a builder from a pretty printer state computation. JPretty printer state starting on a new line indented to the given column. Apply an operation to a state.      rHThe names of special variables, with otherwise illegal identifiers, are  represented by this type. !"#$%&'()*+Unused at present. ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU Redirection " directions". VAppending output, >>. WOutput redirection, >. XInput redirection, <. Y@A file descriptor in Bash is simply a number between 0 and 255. Z[FThe type of legal Bash identifiers, strings beginning with letters or _  and containing letters, _ and digits. \]KThe type of Bash expressions, handling many kinds of variable reference as 1 well as eval and process substitution. It is  and a . ^_`abcdefghijklmnoThe o9 type captures the different kind of statements that may B exist in a Bash statement tree. It is mutually recursive with .  It is a  and a . pqrstuvwxyz{|}~The 3 type captures the annotatedness of a tree of Bash  statements. It is  and a .  Escape a " to produce a literal expression.  Produce an \[ from a  of legal format. Try to render a  from a . r !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ro~}|{zyxwvutsrqp]nmlkjihgfedcba`_^[\YZUXWV+TSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,*)('&%$#"! r *)('&%$#"! !"#$%&'()*+)TSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUXWVVWXYZZ[\\]nmlkjihgfedcba`_^^_`abcdefghijklmno~}|{zyxwvutsrqppqrstuvwxyz{|}~*Create a simple command from expressions.  Declare or assign an array to a sed% command line that will use extended 1 regular expressions, checking for GNU or BSD sed. The  argument 9 determines whether to insert the declaration or not. GPerform a statement for integer values ranging from the first integral # parameter to the second, using seq.  Evaluate seq for the given arguments. BA set statement that covers a few error handling options, setting  errexit, nounset and pipefail. 3Annotate a statement with the 0 value of a monoid. FAnnotate a statement with statements of different types, with special  rules for empty  statements -- as long as the   "comment" in the  is empty, the  is simply elided. =Append some raw lines, in flow, above and below a statement.   Produce a script beginning with #!/bin/bash and a safe set statement.  Produce a script beginning with #!/bin/bash and some (optional) N documentation. Cause the script to be scanned for SHA-1 hash of the setup K (first statement argument) and main (second statement argument) before D running the safe set statement and running the second argument. Scan $0? for the token before running, producing a statement annotated M with the initial statement. This is a bit clumsy but is used internally. Scan $0< for the token before running, correctly producing monoidal F annotations. The function argument provides an annotation for the fgrep . check generated to search for the token. ( const mempty would be  appropriate in most cases.) Scan $0+ the SHA1 of the statement before running. The noop dance -- annotate a $ with a statement, essentially as a  type coercion. NUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~Do~}|{zyxwvutsrqp]nmlkjihgfedcba`_^[UXWVYZ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_``aabcdefghijklmnopqrstuvwxyz{|}~ bash-0.0.0!Language.Bash.PrettyPrinter.StateLanguage.Bash.SyntaxLanguage.Bash.PrettyPrinterLanguage.Bash.LibLanguage.Bash.AnnotationsLanguage.Bash.Script Language.BashPPOpRoundCurlyNewlineWordOutdentIndentPPStateindentscurlyroundcolumnsstringrender renderBytesnlColopopMnlhangwordwordcatoutdentinwordoutword curlyOpen curlyClose roundOpen roundCloseindentPadToNextWord SpecialVarDollar9Dollar8Dollar7Dollar6Dollar5Dollar4Dollar3Dollar2Dollar1Dollar0DollarQuestionConditionalExpressionOrAndNotNumGEqNumGTNumLEqNumLTNumNotEqNumEqStringREStringGTStringLT StringNotEqStringEqStringNonempty StringEmptyOptSetFile_efFile_otFile_ntFile_NFile_SFile_LFile_GFile_OFile_xFile_wFile_uFile_tFile_sFile_rFile_pFile_kFile_hFile_gFile_fFile_eFile_dFile_cFile_bFile_a RedirectionAppendOutInFileDescriptor Identifier Expression ProcessOut ProcessIn EvalUnquotedEvalConcat ArrayLengthLengthElements ARGVLength ARGVElements ReadArraySafe ReadArray ReadVarSafeReadVar QuestionMarkAsteriskLiteral StatementRedirect DictAssign DictUpdateDictDecl ArrayAssign ArrayUpdate ArrayDecl VarAssignUntilWhileCaseFor IfThenElseIfThenFunctionSubshellGroup BackgroundSequencePipeOrOrAndAndBangNoOp SimpleCommand Annotated annotation statementliteral identifier specialVarspecialVarBytesPPpp Annotationannotatebytesbuilder breaklinecmdesedforseqAZsetSafeann_ StatementsLinesscript script_sha1 tokenCheck mtokenCheck tokenFGREPq sha1Checksha1dancenoopcastbase Data.FoldableFoldableGHC.BaseFunctorbytestring-0.9.1.8Data.ByteString.Internal ByteString bytes_statehangcatarray_ppkeyset case_clauserender_redirectquotebracesbraces0brackets identpartbinGrp redirectGrp hangMultiline maxLineLengthfinalLineLengthinlineEvalPrinterghc-primGHC.BoolBool