On Sun, Jan 31, 2010 at 12:04 PM, Malcolm Wallace <malcolm.wallace@cs.york.ac.uk> wrote:
Google has announced that the Summer of Code programme will be running again this year.  If haskell.org people would like to take part again this year, then we need volunteers:

First,
   * suggestions for suitable projects
         (in the past this was organised using a reddit)

Here's a proposal for a project I'd be willing to mentor:

= A high-performance HTML combinator library using Data.Text =

Almost all web applications need to generate HTML for rendering in the user's browser. The three perhaps most important properties in an HTML generation library are:

- High performance: Given that the network introduces a lot of latency the server is left with very little time to create a response to send back to the client. Every millisecond not spent on generating HTML can be used to process the user's request. Furthermore, efficient use of the server's resources is important to keep the number of clients per server high and costs per client low.

- Correctness: Incorrectly created HTML can result in anything from incorrect rendering (in the best case) to XSS attacks (in the worst case).

- Composability: Being able to create small widgets and reuse them in several pages fosters consistency in the generated output and helps both correctness and reuse. (Formlets play a big roll here but being able to treat HTML fragments as values rather than as strings is important too.)

Combinator libraries, like the 'html' package on Hackage [1], address the the last two criteria by making the generated HTML correct by construction and making HTML fragments first class values. Traditional templating systems generally have the first property, offering excellent performance, but lacks the other two.

Task: Create a new HTML combinator library, based on the 'html' library, that's blazing fast, well tested and well documented. Also improve upon the 'html' package's API by e.g. splitting the attribute related functions into their own module.

Tools: QuickCheck for testing, Criterion for benchmarking, and Haddock for documenting.

1. http://hackage.haskell.org/package/html

-- Johan