úÎyŌqv`      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_None!"$*2349:;ILT[` new annotation to the .;Example: 'Any True' annotation will transform the rendered  into uppercase:rlet r = putStrLn . renderWith defaultOptions { optsAnnotate = \a x -> if a == Any True then map toUpper x else x }8r $ text "hello" <$$> annotate (Any True) (text "world")helloWORLDmaximum page width how to annotate the string. Note:A the annotation should preserve the visible length of the string.aOAnnotated string, which consists of segments with separate (or no) annotations.EWe keep annotated segments in a container (list). The annotation is Maybe a+, because the no-annotation case is common.Note: with Last x annotation, the  will overwrite all annotations.Note: if the list is changed into bÉ or similar structure allowing fast viewr and viewl, then we can impose an additional invariant that there aren't two consequtive non-annotated segments; yet there is no performance reason to do so.cTests the invariants of adMake a non-annotated a.e paretoOn m = paretoOn' m []  The document  (x $$> y) concatenates document x and y) with a linebreak in between. (infixr 5)<fghijklmnopqrs tuavcwdxyz{measuree|}~ rendering options renderable€       *fghijklmnopqrs tuavcwdxyz{e|}~ €  NoneL.. Render the  into ‚ omitting all annotations.0 The document  (list xs) comma separates the documents xsÆ and encloses them in square brackets. The documents are rendered horizontally if that fits the page. Otherwise they are aligned vertically. All comma separators are put in front of the elements.1 The document  (tupled xs) comma separates the documents xs and encloses them in parenthesis. The documents are rendered horizontally if that fits the page. Otherwise they are aligned vertically. All comma separators are put in front of the elements.2 The document (semiBraces xs) separates the documents xsÉ with semi colons and encloses them in braces. The documents are rendered horizontally if that fits the page. Otherwise they are aligned vertically. All semi colons are put in front of the elements.3 The document (enclosure l r sep xs) concatenates the documents xs separated by sep( and encloses the resulting document by l and rˇ. The documents are rendered horizontally if that fits the page. Otherwise they are aligned vertically. All separators are put in front of the elements. For example, the combinator 0 can be defined with  enclosure: glist xs = enclosure lbracket rbracket comma xs test = text "list" <+> (list (map int [10,200,3000])).Which is layed out with a page width of 20 as: list [10,200,3000] 2But when the page width is 15, it is layed out as: list [10 ,200 ,3000] 4(punctuate p xs) concatenates all documents in xs with document p except for the last document. isomeText = map text ["words","in","a","tuple"] test = parens (align (cat (punctuate comma someText)))+This is layed out on a page width of 20 as: (words,in,a,tuple) 2But when the page width is 15, it is layed out as: (words, in, a, tuple) ^(If you want put the commas in front of their elements instead of at the end, you should use 1 or, in general, 3.)5 The document (sep xs) concatenates all documents xs either horizontally with (<+>)+, if it fits the page, or vertically with (<$$>)O. Documents on the left of horizontal concatenation must fit on a single line.6 The document  (hsep xs) concatenates all documents xs horizontally with (<+>).7 The document (cat xs) concatenates all documents xs either horizontally with (<>)+, if it fits the page, or vertically with (<$$>).8 The document  (hcat xs) concatenates all documents xs horizontally with (<>).9 The document  (vcat xs) concatenates all documents xs vertically with ($$).: The document  (x <+> y) concatenates document x and y with a space in between. (infixr 6); The document  (x </> y) puts x and y$ either next to each other (with a space1 in between) or underneath each other. (infixr 5)< The document  (x <//> y) puts x and y& either right next to each other (if x= fits on a single line) or underneath each other. (infixr 5)= The document  (x <$$> y) concatenates document x and y) with a linebreak in between. (infixr 5)> Document  (squotes x) encloses document x with single quotes "'".? Document  (dquotes x) encloses document x with double quotes '"'.@ Document  (braces x) encloses document x in braces, "{" and "}".A Document  (parens x) encloses document x in parenthesis, "(" and ")".B Document  (angles x) encloses document x in angles, "<" and ">".C Document  (brackets x) encloses document x" in square brackets, "[" and "]".D The document (enclose l r x) encloses document x between documents l and r using (<>).F The document lparen" contains a left parenthesis, "(".G The document rparen# contains a right parenthesis, ")".H The document langle contains a left angle, "<".I The document rangle contains a right angle, ">".J The document lbrace contains a left brace, "{".K The document rbrace contains a right brace, "}".L The document lbracket% contains a left square bracket, "[".M The document rbracket& contains a right square bracket, "]".N The document squote contains a single quote, "'".O The document dquote contains a double quote, '"'.P The document semi contains a semi colon, ";".Q The document colon contains a colon, ":".R The document comma contains a comma, ",".S The document dot contains a single dot, ".".T The document  backslash contains a back slash, "\".U The document equals contains an equal sign, "=".V The document  (string s) concatenates all characters in s using line for newline characters and char2 for all other characters. It is used instead of 0 whenever the text contains newline characters.X The document (int i) shows the literal integer i using .Y The document  (integer i) shows the literal integer i using .Z The document  (float f) shows the literal float f using .[ The document  (double d) shows the literal double d using .\ The document  (rational r) shows the literal rational r using .]BThe hang combinator implements hanging indentation. The document  (hang i x y) either x and y concatenated with <+> or y below x# with an additional indentation of i.^BThe hang combinator implements hanging indentation. The document (hang separator i x y) either x and y concatenated with <> text separator <> or y below x$ with an additional indentation of i.3./0123456789ƒ:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_\„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ  ./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_<E]^3012: ;<=658974D>?AB@CFGHIJKLMNOPQR_STUVXYZ[\W . /3./0123456789ƒ:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_¤       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuuvwxyyez{|}~€‚ƒ„b…†‡b…ˆb…‰b…Šb…‹bŒdbŒbŒbŒŽbŒbŒbŒbŒ‘bŒ‘bŒ’bŒ“bŒ“bŒ”bŒ•bŒ•bŒ–bŒ—bŒ—bŒ˜bŒ™bŒ™bŒšbŒ›bŒ›bŒœbŒbŒbŒžŸ)pretty-compact-3.0-G8vMsaGxcy433QabV9H0QWText.PrettyPrint.Compact.CoreText.PrettyPrint.CompactDoc AnnotationLayouttextflushannotateOptions optsPageWidth optsAnnotate renderWith$$ groupingBy$fIsStringODoc $fLayoutPair $fMonoidPair$fSemigroupPair $fLayoutODoc $fMonoidODoc$fSemigroupODoc$fPosetM $fLayoutM $fMonoidM $fSemigroupM $fLayoutL $fMonoidL $fSemigroupL $fSemigroupAS$fEqAS$fOrdAS$fShowAS $fFunctorAS $fFoldableAS$fTraversableAS$fEqL$fOrdL$fShowL $fFunctorL $fFoldableL$fTraversableL$fShowM$fEqM$fOrdM $fFunctorM $fFoldableM$fTraversableMrenderdefaultOptionslisttupled semiBraces encloseSep punctuatesephsepcathcatvcat<+><$$>squotesdquotesbracesparensanglesbracketsenclosecharlparenrparenlangleranglelbracerbracelbracketrbracketsquotedquotesemicoloncommadot backslashequalsstringboolintintegerfloatdoublerationalhanghangWithspacebaseData.Semigroup<>AScontainers-0.5.7.1 Data.SequenceSeq_validAsmkAS paretoOn'Pair:-:frstscndODocMkDocfromDocPosetâ‰ēMheight lastWidthmaxWidthLasLength renderWithLmergeOn mergeAllOnbestsOndiscardInvalid quasifilterfitsonlySingleLinespacessecondGHC.BaseStringfoldDocMonoidmemptymappendmconcat Data.MonoidDualgetDualEndoappEndoAllgetAllAnygetAnySumgetSumProduct getProductFirstgetFirstLastgetLastAltgetAlt