Greetings fellow Haskelleers,
I am very pleased to announce a new chapter in the Haskell Server
Pages saga. After a two-year long hiatus, while we in the team have
been busy with Other Stuff, we have resumed work on Project HSP, and
this release marks the first milestone.
=== Project HSP ===
Haskell Server Pages (HSP) is a programming model for writing dynamic
web pages in Haskell, both server-side and client-side. One of its
core features is the use of literal XML syntax mixed with ordinary
* Project HSP home (with bug/feature tracker): http://code.google.com/p/hsp
* Project HSP mailing list: [email protected]
* Project HSP darcs repos: http://code.haskell.org/HSP
For flavor, here is a simple Hello World application written in HSP:
module HelloWorld where
-- A simple HTML page holding a button with onClick action.
page :: HSP XML
(window # alert (string "Hello World !")) %>
Note that literal XML elements are first class expressions in HSP,
unlike languages like PHP. Also note that using literal XML syntax is
by no means required, if you don't feel like writing the XML manually
(I sure don't!). There are combinators for building XHTML pages
(although they are currently missing from version 0.4, will be added
shortly, but release early and all that...).
The most interesting new feature in version 0.4 is that literal XML
syntax (or the equivalent combinators) can now be used to create XML
elements both server-side and client-side, with the same code. Here is
another short example script showing this feature:
module AddParagraph where
import HJScript hiding (test)
makeP x =
<% x %>
page :: HSP XML
(r,b) <- ref <%
makeP "Paragraph created Server-side!"
let fun = do
let x = document # getElementById (string r)
x <: makeP "Paragraph created Client-side!"
b <: ( `onClick` fun)
Project HSP v 0.4 consists of a set of packages with related functionality:
== package hsx ==
Haskell Source with XML (HSX, hsx) is a package that contains
everything pertaining to literal XML syntax. In particular it contains
a) the trhsx preprocessor that translates hsx source files into
vanilla Haskell, and b) modules defining the functions that are
injected by trhsx. It also nominally contains generic combinators for
creating values of the same types as the literal XML syntax, though
these modules are not present in 0.4.
darcs get --partial http://code.haskell.org/HSP/hsxhttp://hackage.haskell.org/cgi-bin/hackage-scripts/package/hsx-0.4
== package hsp ==
The core HSP package defines the datatypes and functions for writing
server-side dynamic web pages. Also defines how to use the HJScript
functionality in HSP pages, to allow for client-side dynamics as well.
darcs get --partial http://code.haskell.org/HSP/hsphttp://hackage.haskell.org/cgi-bin/hackage-scripts/package/hsp-0.4
This package defines an abstract syntax and (not-so-)pretty printer
even on the abstract syntax level using GADTs. The subset of
typing (i.e. no prototyping of classes).
== package HJScript ==
dynamic web pages. The programming model is fairly low-level,
to extend with higher-level functionality. Notable is that HJScript
supports the use of literal XML syntax for creating DOM ElementNodes.
Also notable is that HJScript supports Ajax functionality.
darcs get --partial http://code.haskell.org/HSP/hjscripthttp://hackage.haskell.org/cgi-bin/hackage-scripts/package/HJScript-0.4
== package hsp-cgi ==
Run HSP pages as CGI scripts.
darcs get --partial http://code.haskell.org/HSP/hsp-cgihttp://hackage.haskell.org/cgi-bin/hackage-scripts/package/hsp-cgi-0.4
(Note: Earlier versions of HSP have come with a server application,
hspr, providing the runtime environment for HSP. As of 0.4, this
server has been discontinued and should be considered deprecated.)
Notable items on the TODO list for Project HSP:
- More functionality, allowing for higher-level programming models.
- Writing larger applications, in order to stress test, and serve as
inspiration for higher-level functionality.
- Integrate with HAppS, to allow stateful computation (among other things).
- A home on the web for HSP, with a web page written in HSP.
We welcome both users (of course) and contributors to the project.
There is much work to be done, and we welcome all help we can get. If
you think this is interesting stuff, drop by our mailing list
Like to do web programming in Haskell? Want to do a GSoC project? We
in the project would be happy to see applications for HSP projects,
and the list above is a good starting place. See for instance
/Niklas on behalf of the Project HSP team