Îõ³h*1s0À      !"#$%&'()*+,-./0123456789:;<=>?1.1.0.1 Safe-Inferred1< Safe-Inferred"1ÍÛƒkvitableThe - specifies all valid values for a particular  in the . The set of / can be provided at the initialization of the  to ensure specific values are considered (especially if rendering includes blank rows or columns); if entries are added to the table with a  previously unknown for the , the < for the table is automatically updated to include the new .kvitableThe Æ is the list of tuples and defines the unique key for a value in the .kvitableThe à is the first half of a tuple that makes up the list of keys (the ). The first half is the .kvitableThe à is the first half of a tuple that makes up the list of keys (the ). The second half is the .kvitable©The core KeyValue Indexed Table. This table is similar to a Map, but the values are indexed by a list of Key+Value combinations, and the table contents can be sparse.@kvitable!allowed value for keys (in order)AkvitableŽFunction to generate the keyval if the keyval is not explicitly provided. Provided with the Key and returns the KeyVal that should be used.Bkvitable!Internal contents of the KVITableCkvitablename of the value cells kvitableConverts a list of ([(Key,Val)], Value) tuples to a KVI table. kvitable"Converts a KVI table to a list of ([(Key,Val)], Value) tuples. kvitable„Fetch or set the keyvals list via lenses. Note that setting the keyval list will drop any current contents in the table that do not have entries in the keyvals list; existing entries in the table under the old keys are NOT migrated to the new table entries. kvitableFetch or set the default  generator for this kvitable?Fetch or set the column name for the actual value cell in the .kvitableåRetrieve an entry from the KVITable given a keyspec. The keyspec may be minimally specified (i.e. it does not need to contain keys whose value is the default key value) and it may present the keys out of order and the lookup will still succeed (if there is a value for the normalized keyspec), but it will be faster to use the normalized key directly.²The performance of lookup degrades exponentially on a sparse KVITable: an unset KVITable entry is indistinguishable from a non-normalized keyspec, so if the initial query fails, the keyspec is normalized and then the lookup is re-attempted. This may be fine for an individual query, but for large numbers of queries this is excessively slow. To mitigate this, the lookup' can be used, which assumes the use of a normalized key.kvitableLike ä, but assumes a normalized key (all key elements specified, and in the proper order). Faster than Å, but will return false negatives if not used with a normalized key.kvitable…Inserts a new cell value into the table at the specified keyspec location. The keyspec may be minimally specified and out-of-order.ÙThis may be an expensive operation if it has to extend the keyvals for the table. In general, insertion is expected to be less frequent than lookups so computation costs are biased towards the insertion operation.This is equivalent to insertWith const.kvitable¤Inserts a new cell value into the table at the specified keyspec location, if no value exists at that location. Otherwise, the old and new value are combined via  f new old<. The keyspec may be minimally specified and out-of-order.ÙThis may be an expensive operation if it has to extend the keyvals for the table. In general, insertion is expected to be less frequent than lookups so computation costs are biased towards the insertion operation.kvitable±foldlInsert is a convenience function that can be specified as the function argument of a foldl operation over the list form of a KVITable to generate the associated KVITable.This is equivalent to foldlInsertWith const.kvitableáfoldlInsertWith is a convenience function that, when curried with a "combining" function, can be specified as the function argument of a foldl operation over the list form of a KVITable to generate the associated KVITable.kvitableFilter 9 to retain only the elements that satisfy some predicate.kvitable;Delete the value at the specified keyspec location in the Â. If the keyspec does not exist, the original table is returned.kvitable>Adjust a value at the specified keyspec; return the original + if that keyspec is not found in the table.kvitable>Adjust a value at the specified keyspec; return the original + if that keyspec is not found in the table.kvitable Update the Ø to remove or set a new value for the specified entry if the updating function returns Nothing or Just v¯, respectively. The update function is passed both the keyspec and the current value at that key. If the value does not exist in the table, the original table is returned.kvitable Update the Ø to remove or set a new value for the specified entry if the updating function returns Nothing or Just v£, respectively. The update function is passed the value for the keyspec to be updated. If the value does not exist in the table, the original table is returned.kvitableThe ( function returns a set of rows for the Ý as a list structure, where each returned entry is a different row. A row consists of the valuesá of the keys for that row followed by the value of the entry (to get the names of the keys, use  ).!kvitableªThe KVITable semigroup is left biased (same as Data.Map). Note that joining tables can result in a table that has a different keyVals sequence than either input table.       Safe-Inferred1+í$kvitableThe $Ê specifies the various controls and configurations used when rendering a  in various formats. The $? is global to all formats, although some of the fields in the $4 will be ignored as not-applicable by some formats.&kvitableD5 (default) removes rows for which there are no values'kvitableD8 (default) removes columns for which there are no values(kvitableDù (default) to maintain a consistent column width, otherwise the columns are shunk to the minimum size needed to display the title and values. Not applicable for some backends (e.g. HTML) where the backend provides table rendering functionality.)kvitable™Specifies a function to sort the KeyVals (rows and columns, respectively) for the output. If no function provided, no sorting is performed. The provided KeyVals are in the order in which the Keys are declared to the KVITable; the values for each key may be in an arbitrary order. The usual expectation is that this will only sort the values for each Key, but it is allowed to re-order the Keys as well.áSorting is done *prior* to applying maxCells and maxCols limitations; this provides the unsurprising results for the user but means that this function may perform extra work to sort rows and columns that will not be shown.ƒIt is permissible to move entries from the rows to the columns and vice-versa; this function has control over the shape of the resulting table, which includes redistributing the rows and columns such that the result will violate maxCols (but not maxCells).;The columns keyvals will be empty if colStackAt is Nothing.*kvitableÂColumn key to begin stacking keys in columns and sub-columns rather than creating additional sub-rows. This is performed on the originally-specified key order, prior to calling any provided ) function.+kvitableD (default) if an identical 2 is to be repeated in subsequent applicable rows.,kvitableÛList of Key names that should by grouped by inserting horizontal row lines between KeyVals-kvitableÔCaption to render for table for backends which support captions; otherwise ignored..kvitableàThe maximum number of cells that will be rendered. The size of the table is #rows times #cols, so a 100x100 table is 10000 entries. This value is used to limit the size of the rendered table to provide a reasonable output in a reasonable amount of time and memory; tables larger than this limit will return a "table too big" message when rendered.•ASCII: At least 1 character for the cell, plus 3.5 characters for boundaries means that even on an ultra-wide monitor with a very small font, the table isn't very readable beyond 30-40 columns. In addition, the algorithm needs to continually adjust table column widths to accomodate new values, so there is a great deal of backtracking involved and the time taken to render grows quite quickly.®HTML: A browser has reasonable constraints on displaying a table: 10000 entries is difficult for the user to comprehend, but the browser is probably reasonably performant. At 500x500, the browser is likely to be very sluggish, with visible delays in rendering visible regions during scrolling./kvitableãThe maximum number of columns to render. This limit is only useful if it is set to less than the .å value, and it is useful in that case to ensure that more than one (partial) row is displayed. The .1 value takes priority over this value. See the . for more information.0kvitableÐReturns the default rendering configuration, to be used with a format-specific render call.1kvitableƒTable KeyVals sorting function; alphanumeric with numeric preference. This can be used as the sortKeyVals function for the table.ÍIf the value starts or ends with a digit, then this should do a rough numeric sort on the expectation that the digits represent a version or some other numeric value. As an approximation of a numeric sort, sort by word size and then string value. This will result in [ "1", "2", "10", "50", "400" ], but would fail with [ "v1.0", "v2.0", "v3.0", "v2.0.5", "v1.0.0.3" ], but it's a reasonably fast heuristic and probably better than a straight ascii sort.EkvitableåSorting for KeyVals. If the value starts or ends with a digit, then this should do a rough numeric sort on the expectation that the digits represent a version or some other numeric value. As an approximation of a numeric sort, sort by word size and then string value. This will result in [ "1", "2", "10", "50", "400" ], but would fail with [ "v1.0", "v2.0", "v3.0", "v2.0.5", "v1.0.0.3" ], but it's a reasonably fast heuristic and probably better than a straight ascii sort.This function is used by the  rendering functions.$%&'()*+,-./01$%&'()*+,-./01 Safe-Inferred1ÂÃÄÅÆäð,û6kvitable­Returns the rows and columns KeyVals, with appropriate application of RenderConfig specifications: colStackAt, maxCells, maxCols. Does not collapse empty rows or columns.235467354267 Safe-Inferred"1ÂÃÄäð. :kvitableÁRenders the specified table in HTML format, using the specified $# controls. The output is only the  tableÇ definition; it is intended to be embedded in a larger HTML document.:$%&'()*+,-./0:$%&'()*+,-./0 Safe-Inferred "1ÃÚÛÝäð/î?kvitableÂRenders the specified table in ASCII format, using the specified $ controls.Fkvitable‰Formatted width of output, including pad on either side of each column's value (but not the outer set), and a separator between columns.’Note that a column size of 0 indicates that hideBlankCols is active and the column was found to be empty of values, so it should not be counted.?$%&'()*+,-./0?$%&'()*+,-./0Ç      !"#$%&'()*++,-./0123456789:;<=>?@ABCD@EFGHIJKLMÎ'kvitable-1.1.0.1-ItR6X6hWUnmESrmkCUU2zjData.KVITable.Internal.Helpers Data.KVITableData.KVITable.RenderData.KVITable.Render.InternalData.KVITable.Render.HTMLData.KVITable.Render.ASCIIkvitableKeyssinglesnocmaxOfKeyValsKeySpecKeyValKeyKVITablefromListtoListkeyVals keyValGen valueColNamelookuplookup'insert insertWith foldlInsertfoldlInsertWithfilterdelete adjustWithKeyadjust updateWithKeyupdaterows$fIsListKVITable$fTraversableKVITable$fFoldableKVITable$fFunctorKVITable$fMonoidKVITable$fSemigroupKVITable$fShowKVITable $fEqKVITable RenderConfig hideBlankRows hideBlankCols equisizedCols sortKeyVals colStackAt rowRepeatrowGroupcaptionmaxCellsmaxColsdefaultRenderConfigsortNumericAlphaTblHdrsTblHdrVAndMorerenderingKeyValsnLength*$fConvertName"UTF8""KeyVal""column header"'$fConvertName"UTF8""Key""column header"render $fToHtmlNamed$fMonoidFmtLine$fSemigroupFmtLine$fSemigroupHeaderLinekeyvals keyvalGencontents valuecolNameghc-prim GHC.TypesTrue sortWithNumsfmtWidth