Hi,

haste-perch defines builder elements (perchs) for Haste.DOM elements that are appendable, so that dynamic HTML can be created in the client in a natural way, like textual HTML, but programmatically and with the advantage of static type checking. It can be ported to other haskell-js compilers.

http://hackage.haskell.org/package/haste-perch

This program, when compiled with haste:

  main= do
   withElem "idelem" $   build $ do
   div $ do
     div $ do
           p "hello"
           p ! atr "style" "color:red" $   "world"

   return ()

Creates these element:

   <div id= "idelem">  <-- was already in the HTML
       <div>
         <div>
            <p> hello </p>
            <p style= "color:red"> world </p>
         </div>
       </div>
   </div>

Since the creation is in the browser, that permit quite dynamic pages for data
presentation, and interctive textual (a.k.a "serious") applications and, in general
the development of client-side web frameworks using haskell with the haste compiler.
 

See the README in the git repository:

https://github.com/agocorona/haste-perch

--
Alberto.