db     NoneCBThis is the most primitive and essential operation for building a 1. All other table-building functions (such as ,  , and ) build on top of G. One common trend in the convenience functions is that they accept  as the table header. This is done because I have found that it is uncommon to need the full power of HTML in the header. Just know that if you need it, this function is the only way to get it. The first argument is a widget that is the content to be displayed in the table header. The second argument is the a function that consumes a value to produce the content shown in a row of the table body. These widgets need to be wrapped in a th/td if you are using this function.This is the same as ;, with the convenience of accepting the table header as _. It also wraps the header widget in a th element and wraps the cell widget in a td element.This is the same as , but the table cell content it produces is constant, meaning that the table cell in this column will be the same for all rows.  Identical to A, with the convenience of accepting the table cell content as .  Identical to A, with the convenience of accepting the table cell content as .  Identical to A, with the convenience of accepting the table cell content as  . If the o is not encoded as UTF8-encoded text, the cell will display text indicating that non-text data was given.  Identical to A, with the convenience of accepting the table cell content as .  Identical to ^, with the convenience of accepting the table cell content as any type with an instance of . Identical to 4, but allow to format the output with the syntax of + The datatype used must be an instance of Convenience function for building a plaintext link where the link text and the route are determined by the row of data. If you are working with an Entity (from  persistent') and your foundation type is named App" you may want something like this: myTable :: Table App (Entity Foo) myTable = mempty <> Table.linked "Name" (fooName . entityVal) (FooEditR . entityKey) <> Table.int "Size" (fooSize . entityVal)|This is the blueprint for a two-column table. The first column is a link for editing the Foo, and the linked text is the FooJ name. The second column is just a number representing the size of the Foo shown as plaintext. Prevents showing values in a # if a condition is not met. Example myTable :: Table App Person myTable = mempty <> Table.text "Name" personName <> Table.when (\p -> personAge p > 21) (Table.int "Age" personAge)In this example, the table header Age will always show up with its corresponding column, but any row for a person under 21 will have a empty value for that column. The effect can be more profound: 7myTable :: Table App Person myTable = mempty <> Table.text "Name" personName <> Table.when (\p -> personAge p > 21) (mempty <> Table.text "Favorite Color" personFavoriteColor <> Table.text "Address" personAddress <> Table.linked "Profile Page" (const "Profile") (ProfileR . personUsername) )This second example does not show information for any of the last three columns if the person is under 21. The columns themselves though are always present regardless of whether or not any values satisfy the predicate. Promote a  to take 0 values. When the data passed in matches the a data constructor, the row is presented as it would be with the original table. When it is , the row is empty.VAs an example, imagine that in the data model for some application, there exists a User and an Item . Each Item" can belong to either one or zero User&s. We may build a table as follows: userTable :: Table site User userTable = ... itemTable :: Table site Item itemTable = ... itemWithUserTable :: Table site (Item, Maybe User) itemWithUserTable = mconcat [ contramap fst itemTable , contramap snd (Table.maybe peopleTable) ]Then is roughly an if-then-else construct with the latter two clauses (then and else) reversed. The name is taken from the  function in .QThis builds a multicolumn table. Here is an example of how this could be used: bimport Data.List (lookup) import qualified Data.Text as Text data Color = Red | Green | Blue deriving (Enum,Show,Bounded) data Age = Child | Teen | Adult | Elder deriving (Enum,Show,Bounded) preferenceLevel :: Age -> Color -> WidgetT site IO () preferenceLevel age color = intToWidget $ fromMaybe 0 $ lookup (age,color) [ ((Child,Red), 36), ((Child,Green, 10)), ((Teen,Green), 16) , ((Teen,Blue), 8), ((Teen,Red), 31), ((Adult,Blue), 18) , ((Adult,Green), 17), ((Elder,Blue), 41) ] where intToWidget :: Int -> WidgetT site IO () intToWidget = toWidget . toHtml . Text.pack . show myTable :: Table App Color myTable = mconcat [ Table.text "" (Text.pack . show) , Table.columns preferenceLevel (Text.pack . show) [minBound..maxBound] ] myWidget :: WidgetT App IO () myWidget = Table.buildBootstrap myTable [minBound..maxBound]The appearance of myWidget would be:  | Child | Teen | Adult | Elder ------------------------------------- Red | 36 | 31 | 0 | 0 Green | 10 | 16 | 17 | 0 Blue | 0 | 8 | 18 | 41This function is identical to 8 except that it does not wrap the cell contents with  th and  td for you.From a  blueprint and a list of the data that it accepts, build the actual html needed to visualize this data. This particular rendering of the data applies the classes table and  table-striped to the  table element. If you are using bootstrap, this means that it will be formatted in the bootstrap way. If not, the table will still render correctly, but the classes will be renamed. I'm open to pull requests for supporting other common table formats out of the box.  Column nameText extracting functionRoute extracting function PredicateExisting table Contents when predicate is false PredicateExisting table !"#$     !"#$%       !"#$%&'() * + ,-./012yesod_0KuoWrocKDH1PyHovFjhb6 Yesod.Table Text.Printfprintf PrintfArgDataBoolColumnheadercellTable singletonwidgetconsttextstring bytestringintshowlinkedwhenwhenWithmaybe maybeWithboolcolumnscolumns'buildBootstraptext_1l1AN4I48k37RaQ6fm6CEhData.Text.InternalTextbaseGHC.BaseStringbytes_6elQVSg5cWdFrvRnfxTUrHData.ByteString.Internal ByteStringghc-prim GHC.TypesIntGHC.ShowShowMaybeJustNothing asWidgetIO textToWidget$fDivisibleTable$fContravariantTable$fContravariantColumn