úÎ! Ö     SafeYshowerEither a comma or an element.For example, the tuple section (,a,,b) is represented like this: k[ ShowerCommaSep, ShowerCommaElement "a", ShowerCommaSep, ShowerCommaSep, ShowerCommaElement "b" ] shower A comma, ',' shower An element shower*A field separator used in records, either '=' for Haskell records or ':' for JSON.showerAn equality sign, '=' shower A colon, ':' shower/A tagless final encoding for a result builder (ShowS, Doc, Html, etc). Note that   and  E take exact uninterpreted strings to avoid losing information (e.g. "\n" vs. "\10").shower A record, { x = 24, y = 42 } or { "a": null, "b": 13 }.showerA list,  [1, 2, 3]. shower A tuple,  (1, 2, 3). showerA string literal, "hello, (world)". showerA character literal, '('. shower,Variable names, numeric literals, and so on. showerWhitespace-separated elements.  NoneŠshower Parser for  expressions.None[showerA pretty document, with a  instance.shower Render a  ShowerDoc with the default style.NoneºshowerA drop-in replacement for print, that has nice layout. Use it in GHCi with !-interactive-print=Shower.printer: >ghci> :set -interactive-print=Shower.printer ghci> ([1..15], ['a'..'z'X]) ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], "abcdefghijklmnopqrstuvwxyz") ;NB: does not handle infinite data structures at the moment.showerA drop-in replacement for showS that has nice layout. NB: does not handle infinite data structures at the moment.showerParse and pretty-print  output or JSON.     !shower-0.2-6eMp22b0pw7FcLqRgCpyhT Shower.Class Shower.ParserShower.PrinterShower ShowerCommaShowerCommaSepShowerCommaElementShowerFieldSepShowerFieldSepEqualsShowerFieldSepColon showerRecord showerList showerTupleshowerStringLit showerCharLit showerAtom showerSpacepShower ShowerDocSD showerRender$fShowerShowerDocprintershower showerStringbaseGHC.Showshow