h      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-InferredHorizontal alignment.Vertical alignment. Alignment.LHow many columns are in this thing? A column is one character wide. Every  in a ( always has the same number of columns.This is for things that have a single, solitary width, not things like columns that might have different widths at different points.A count of columnsA count of rows &Box payload. Has the data of the box. QA Box that has height of at least one. It must have at least one component Bar. tA Box with width but no height. The Int must be at least zero. If it is zero, the Box has no height and no width.A  has a width in columns and a height in rows. Its height and width both are always at least zero. It can have positive height even if its width is zero, and it can have positive width even if its height is zero.Each row in a . always has the same number of characters; a C with zero height has no characters but still has a certain width.&Occupies a single row on screen. The s you place in a o should not have any control characters such as newlines or tabs, as rainbox assumes that each character in a  takes up one screen column and that each character does not create newlines. Leave newline handling up to rainbox. However, rainbox will not check to make sure that your inputs do not contain newlines, tabs, or other spurious characters. Similarly, use of combining characters will create unexpected results, as Rainbox will see something that takes up (for instance) two characters and think it takes up two screen columns, when in reality it will take up only one screen column. So, if you need accented characters, use a single Unicode code point, not two code points. For example, for , use U+00E9, not U+0065 and U+0301.:Background colors to use when inserting necessary padding. How many  are in this ? A blank . Useful for aligning other .!A  made of P. Always one Bar tall, and has as many columns as there are characters in the .'SMerge several Box horizontally into one Box. That is, with alignment set to ATop:  --- ------- ---- --- ------- ---becomes ,-------------- ----------.... ---...........&With alignment set to ABottom, becomes ,---........... ----------.... --------------(LMerge several Box vertically into one Box. That is, with alignment set to %: #------- ------- --- --- ---- ----becomes 7------- ------- ---.... ---.... ---.... ----... ----...With alignment set to & , becomes /------- ------- ....--- ....--- ...---- ...----eGiven the resulting height, pad a list of Height. So, when given a height of 3 and an alignment of #: -------- --------becomes -------- -------- ........where dashes is a  with data, and dots is a blank .!Given the resulting width, pad a 5. So, when given a width of 10 and an alignment of &, -------becomes  ...-------;Merge several horizontal Height into one set of horizontal  . That is: 5----- ----- ----- ----- ----- ----- ----- ----- -----into /--------------- --------------- ---------------PStrange behavior will result if each input list is not exactly the same length.)View a d, possibly shrinking it. You set the size of your viewport and how it is oriented relative to the  as a whole. The + returned may be smaller than the argument , but it will never be bigger. Examples::set -XOverloadedStrings3let box = catV defaultBackground top [ "ab", "cd" ]3printBox . view (Height 1) (Width 1) left top $ boxa7printBox . view (Height 1) (Width 1) right bottom $ boxd2Drops the given number of characters from a Chunk.Generate spaces.+aSplit a number into two parts, so that the sum of the two parts is equal to the original number.J  !"#$%&'()*Background colorsNumber of blanks+,  !"#$%&'()*+0"#$%&   !'(*)+1   !"#$%&'()*+ Safe-Inferred,A Table is a two-dimensional array with two associated one-dimensional arrays: an array of labels for each column, and an array of labels for each row.-One label for each column.One label for each row/Two-dimensional array of cells0Make a new Table.1fGiven a two-dimensional array and a function that generates labels, return an array of column labels.2cGiven a two-dimensional array and a function that generates labels, return an array of row labels.3Transform the cells of the table. Similar to the Functor instance, but the mapping function has access to the label and index of each cell in the ,.4Transform the column labels.5Transform the row labels.6BGiven a two-dimensional array, return a list of columns in order.7>Given a two-dimensional array, return a list of rows in order.8Generate a two-dimensional array from a list of rows. Each row must be of equal length; otherwise, the generated array will have undefined elements.9Generate a two-dimensional array from a list of columns. Each column must be of equal length; otherwise, the generated array will have undefined elements.,-./0pFunction to generate the column labels. It is applied to the column index and the full contents of the column.gFunction to generate the row labels. It is applied to the row index and the full contents of the row.Cells of the table1pFunction to generate the column labels. It is applied to the column index and the full contents of the column.2gFunction to generate the row labels. It is applied to the row index and the full contents of the row.3Function is passed the label for the column, the label for the row, the column index, the row index, and the contents of the cell. It returns a new cell.4\The function is passed the column label, column index, and the full contents of the column.5WThe function is passed the row label, the row index, and the full contents of the row.6789,-./0123456789,-./-./0123456789 ,-./0123456789 Safe-Inferred<:Use the default background colors of the current terminal.=8A blank horizontal box with a given width and no height.>)A blank vertical box with a given length.?A Box made of a single .@*Grow a box. Each dimension of the result A is never smaller than the corresponding dimension of the input . Analogous to DV, so you give the resulting dimensions that you want. The alignment is analogous to D6; for instance, if you specify that the alignment is top and leftM, the extra padding is added to the right and bottom sides of the resulting .AGrow a  horizontally.BGrow a  vertically.CReturns a list of ,, each being exactly as wide as the widest  in the input list.E Resize a ^. Will grow or trim it as necessary in order to reach the resulting size. Returns an empty  if either  or  is less than 1.FResize horizontally.GResize vertically.H sepH sep a bs lays out bs horizontally with alignment a , with sep! amount of space in between each.I sepV sep a bs lays out bs vertically with alignment a , with sep! amount of space in between each.JpunctuateH a p bs! horizontally lays out the boxes bs with a copy of p interspersed between each.KA vertical version of J.L Convert a  to Rainbow !s. You can then print it using  or the like.MPrints a Box to standard output. If standard output is not a terminal, no colors are used. Otherwise, colors are used if your TERM environment variable suggests they are available.:;<=>?@AResulting widthBResulting heightCDEFResulting widthGResulting heightHIJKLM4  !"#$%&'()*:;<=>?@ABCDEFGHIJKLM5<:; "#$%& =>!?'(HIJKD*)@ABCEFGLM:;<=>?@ABCDEFGHIJKLM Safe-InferredT0Amount of intervening space for horizontal joinsi Paste two N together horizontally with no intervening space. Left fixity, precedence 5.j Paste two = together horizontally. Intervening space is determined by T. Left fixity, precedence 5.k Paste two K together vertically with no intervening space. Left fixity, precedence 6.l Paste two ; together vertically. Intervening space is determined by U. Left fixity, precedence 6.NOPQRSTUVWXYZ[\]^_`abcdefghijkl=  !"#$%&<?LMNOPQRSTUVWXYZ[\]^_`abcdefghijkl>< "#$%&OPQRSTUNV WX!?YZbcdeijklfgh[\]^_`aLMNOPQRSTUVWXYZ[\]^_`abcdefghijklijkl Safe-Inferred mA m; consists of multiple screen lines; each screen line is a .o#Each Bar is one line on the screen.pDHow this Cell aligns compared to the other Cell in its column; use %, ", or &.q=How this Cell aligns compared to other Cell in its row; use #, ", or $.rBackground color for necessary padding that is added to the Cell to make it the correct width and height. Does not affect the Chunk contained in the o8; these will use the colors that are designated in the Chunk itself.Returns the width of each  in the m.sTransforms a grid of m to a grid of & by adding necessary padding to each m'. In every row of the array, all the @ will have equal height; in every column of the array, all the  will have equal width.tUse ' and ( to fuse an array of  into a single . For example, if the  of the array are  ((0,0),(3,5))3, then the array has the number of cells given by rangeSize ((0,0), (3,5))+ (that is, 24). The upper left corner is (0,0) and the lower right corner is (3,5).; the upper right and lower left corners are (3,0) and (0,5), respectively.uCreates a single  from a list of rows of m. Each list is a row of md. The list of rows is from top to bottom; within each row, the cells are given from left to right.This function is partial. Each list of mz must be the same length; otherwise, your program will crash. Since you will typically generate the list of rows using  or list comprehensions or the like, this isn't typically a problem; if it is a problem, then check the inputs to this function with w before you apply it.vCreates a single  from a list of columns of m. Each list is a column of mk. The list of columns is from left to right; within each column, the cells are given from top to bottom.This function is partial. Each list of m} must be the same length; otherwise, your program will crash. Since you will typically generate the list of columns using  or list comprehensions or the like, this isn't typically a problem; if it is a problem, then check the inputs to this function with w before you apply it.wChecks the input to u or v: to ensure that it is safe. True if the list of list of m6 is safe for either of these functions; False if not.Creates a Cell with a % horizontal alignment, a # vertical alignment, and a <. The cell will be one / tall and contain the text given in the string. mnopqrstuvw"#$%&:<LMmnopqrstuvw<:#$%&"mnopqruvwstLMmnopqrstuvw Safe-Inferredxyz{|}~xyz{|}~xyz{|}~xyz{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQQRSTUVW?@)*BCDEGHIJKLMF,+XYZ[\\]^_R`abcdeefghijklmnopqrstuvwxyz{|}~.rsrainbox-0.8.0.0Rainbox.Box.PrimitivesRainbox.Array2d Rainbox.BoxRainbox.ReaderRainboxRainbox.TutorialHorizVertAlignHasWidthwidthWidthunWidthHeightunHeightBoxP WithHeightNoHeightRodunRodBoxunBoxBarunBarNibbleunNibbleSpaces numSpaces spcBackground BackgroundbarToBox barsToBoxheightblankchunkscentertopbottomleftrightcatHcatVviewVviewHsplitTablelColslRowscellstable labelCols labelRowsmapTable mapColLabels mapRowLabelscolsrows arrayByRows arrayByColsbackgroundFromChunkbackgroundToTextSpecdefaultBackgroundblankHblankVchunkgrowgrowHgrowVcolumnviewresizeresizeHresizeVsepHsepV punctuateH punctuateVrenderprintBoxEnvSpecs backgroundalignHalignVspaceHspaceVrunEnv<-><+>/-//+/CellbarshorizvertboxCells glueBoxes gridByRows gridByCols checkGridRecord firstNamelastNameaddressphoneemailbalancerecordscell recordToCellscellRowsspacedOutCellsprintSampleBoxrainbow-0.20.0.2 Rainbow.TypesChunkpadHorizpadVert mergeHorizdropChunkCharsblanksARightALeftABottomATop NonCenterCenter dropChars takeCharstakeChunkChars$fHasWidthChunk $fHasWidthBox $fHasWidthBar $fIsStringBox$fHasWidthBoxP $fHasWidthRod $fIsStringRod $fMonoidBar $fIsStringBar$fHasWidthNibble$fIsStringNibble$fHasWidthSpaces$fColorBackground indexRows$fFunctorTable putChunks renderRod cellWidthsbaseGHC.ArrboundsGHC.Basemap$fIsStringCell