[Haskell-cafe] Is Text.XHtml.Table usable?

Anton van Straaten anton at appsolutions.com
Sun Mar 29 21:03:23 EDT 2009


Thomas Hartman wrote:
> I was playing with Text.XHtml.Table but couldn't use it to output tables.
> 
> ( cell . toHtml $ " a " ) `beside` (cell . toHtml $ " b " )
> <tr
>> a  b </tr
>>
> 
> already seems wrong -- should be two cells, right? And the result
> doesn't get embedded in a table tag?

'cell' is not a TD element, it's an abstraction used to manage cells and 
deal with arbitrary numbers of rows and columns.  You won't normally use 
'cell' directly, but it gets used when laying out a table.

Here's a simple two-cell table:

table << (td << " a ") `beside` (td << " b ")

<TABLE>
    <TR>
       <TD>
           a
       </TD>
       <TD>
           b
       </TD>
    </TR>
</TABLE>

Note that 'beside' has an infix version, <->.  'above' also has an infix 
version, </>.  So here's a 2x2 table:

table << (td << "a" <-> td << "b"
       </> td << "c" <-> td << "d")

(I haven't included the HTML output, but it works.)

To see what 'cell' does, we can create a table with cell widths and 
heights other than 1.  In GHCi:

let twoDown = (td << "a" </> td << "b")
let threeAcross = (td << "d" <-> td << "e" <-> td << "f")
let threeDown = (td << "g" </> td << "h" </> td << "i")
let oneTopTwoBottom = (td << "j" </> td << "k" <-> td << "l")
table << (twoDown <-> threeAcross <-> threeDown <-> oneTopTwoBottom)

The 'cell' function doesn't get called explicitly above, but it gets 
used internally.  Try it, the results are fairly self-explanatory.

Anton



More information about the Haskell-Cafe mailing list