śĪa>VKĄ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æ"1Operations we can perform while pretty printing. Introduce a level of parens. Introduce a level of braces. Separate words with space. Move to newline. Add bytes to the script. Remove an 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.  !FThis procedure is used in printing statements within evals, to set up $ indentation correctly for lines  following the first line. It ensures K that the second and following lines are printed aligned with the first M character of the first line of the statement, not the first character of  the $(, >( or <( enclosing the eval. $  !ĄĮ"  !"   !‚"Unused at present. #$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKL Redirection " directions". MAppending output, >>. NOutput redirection, >. OInput redirection, <. P@A file descriptor in Bash is simply a number between 0 and 255. QRSTUVWHThe names of special variables, with otherwise illegal identifiers, are  represented by this type. XYZ[\]^_`abcdefgFThe type of legal Bash identifiers, strings beginning with letters or _  and containing letters, _ and digits. hijklKThe type of Bash expressions, handling many kinds of variable reference as 1 well as eval and process substitution. It is Ā and a Ć. mnopqrstuvwxyz{|}~€The 9 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 Ć. ‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›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 hg from a Ä of legal format. ¢Try to render a W from a Ä. £‚"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£‚›œžš™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚l€~}|{zyxwvutsrqponmŸikj gh”Wfedcba`_^]\[ZYX¢£RVUTSPQLONM"KJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#‚")KJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$##$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLONMMNOPQQRVUTSSTUVWfedcba`_^]\[ZYXXYZ[\]^_`abcdefghhikjjkl€~}|{zyxwvutsrqponmmnopqrstuvwxyz{|}~€š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžœžŸ ”¢£¤„¦§Ø©Ŗ«¤„¦§Ø©ÅĘĒČÉŹĖĢĶĪĻŖŠŃ«ŅÓŌÕØ©¦§¤„Ŗ«¤„„¦§§Ø©Ŗ«¬*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. ±JA statement that allows one to redirect output to a file as root. This is  what you might expect sudo echo x > privileged_file would do (though " that does not actually work). ²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. æ ·ø¹ŗ»¼½¾æ ·ø¹ŗ»¼½¾æ ·ø¹ŗ»¼½¾æVLMNOPQWgijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢¤„Ø©¬­®Æ°±²³“µ¶·øKš™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…„ƒ‚›œžl€~}|{zyxwvutsrqponmŸg”W¢ikj LONMPQ¤„Ø©·ø×      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWWXYZ[\]^_`abcdefghijklmmnopqrstuvwXxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶¶··ø¹ŗ»¼½¾æĄĮĀĆÄÅĆĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽß bash-0.1.2!Language.Bash.PrettyPrinter.StateLanguage.Bash.SyntaxLanguage.Bash.PrettyPrinterLanguage.Bash.LibLanguage.Bash.AnnotationsLanguage.Bash.Script Language.BashPPOpRoundCurly WordSeparatorNewlineBytesOutdentIndentPPStateindentscurlyroundcolumns separatedstringrender renderBytesnlColopopMnlhanghangWordwordwordcatoutdentinwordoutword curlyOpen curlyClose roundOpen roundCloseindentPadToNextWordConditionalExpressionOrAndNotNumGEqNumGTNumLEqNumLTNumNotEqNumEqStringREStringGTStringLT 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 RedirectionAppendOutInFileDescriptorTrimLongestTrailingShortestTrailingLongestLeadingShortestLeading SpecialVarDollar9Dollar8Dollar7Dollar6Dollar5Dollar4Dollar3Dollar2Dollar1Dollar0DollarUnderscore DollarBang DollarDollar DollarHyphenDollarQuestion IdentifierVarName VarSpecialVarIdent Expression ProcessOut ProcessIn EvalUnquotedEvalConcat ArrayLengthLengthKeysElements ARGVLength ARGVElements ReadArraySafe ReadArray ReadVarSafeReadVarTilde QuestionMarkAsteriskLiteral StatementRedirect DictAssign DictUpdateDictDecl ArrayAssign ArrayUpdate ArrayDecl VarAssignUntilWhileCaseFor IfThenElseIfThenFunctionSubshellGroup BackgroundSequencePipeOrOrAndAndBangNoOp SimpleCommand Annotated annotation statementliteralvarName identifier specialVarspecialVarBytesPPpp Annotationannotatebytesbuilder trimPrinter breaklinecmdesedforseqAZsetSafe sudo_writeann_ StatementsLinesscript script_sha1 tokenCheck mtokenCheck tokenFGREPq sha1Checksha1dancenoopcast renderIndentsbase Data.FoldableFoldableGHC.BaseFunctorbytestring-0.9.1.10Data.ByteString.Internal ByteString bytes_statehangcatarray_ppkeyset case_clauserender_redirectquotebracesbraces0brackets identpartbinGrp redirectGrp hangMultiline maxLineLengthfinalLineLengthinlineEvalPrinterghc-primGHC.BoolBool