ANN: HAppS -- Haskell Application Server v 0.3
S. Alexander Jacobson
alex at alexjacobson.com
Fri Mar 4 16:56:17 EST 2005
HAppS is a Haskell library for building Internet applications, featuring:
* HAppS.ACID: Guarantee application integrity in the face of unplanned
outages using this module's integrated write-ahead logging and checkpointing
* HAppS.DBMS: Do relational operations in Haskell (rather than SQL) on
Haskell sets (outside the IO Monad). Define custom indices for your Haskell
datatypes (e.g. geographic/geometric types). Use in combination with ACID for a
robust relational DBMS customized for your application.
* HAppS.Protocols: Expose your application using as an HTTP server and/or
by recieving and sending SMTP.
Changes since 0.2:
* Much cleaner interface for ACID transaction handlers
* DBMS operators that look more like HaskellDB operators
* SMTP send errors are exposed for use in future reliable deliver implementation
* ACID callbacks disabled. Framework in place for total order on callbacks.
* SideEffect queues are now algrebraic types rather than strings.
* Parametrized HTTP using XML ToElement and HTTP ToMessage FromMessage
and ToURI classes (you write transaction handlers in terms of Haskell types and the
system takes care of exposing them for HTTP)
* Parametrized HTTP response now has type (ToURL url,ToMessage msg)=>Response url message
Framework takes care of automatically translating relative URLs to
Answers to questions a few people have asked:
* Compare HAppS.DBMS with HaskellDB
HaskellDB is really optimal if you want to talk to external databases.
HAppS.DBMS is really good if you want to do relational operations on
Haskell Sets without going to the IO monad.
* Compare HAppS.ACID to STM
Use STM if all your IO operations have a two-phase-commit interface.
Use HAppS.ACID if your IO interfaces are not transactional. Instead
HAppS.ACID gives you multi-queue, at-least-once execution of
side-effects, and a total order on their callbacks. There is no
rollback semantic because you can't unsend email.
* Compare HAppS.Protocols.SMTP to Peter Simon's Postmaster
Postmaster is trying to be a full fledged MTA.
SMTP is trying simply to give you SMTP receive/send functionality in
your applications. Neither yet has a queuehandler. We both hope to
merge lessons learned soon.
* Compare HAppS.Protocols.HTTP to Warrick Gray's Network.HTTP module
Network.HTTP is more oriented towards building HTTP clients.
HAppS..HTTP is more oriented towards building HTTP servers.
Network.HTTP enforces a stronger separation between headers and body.
HAppS..HTTP delivers a MIME message back to the app. With
infrastructure to enable transparent conversion to and from
S. Alexander Jacobson tel:917-770-6565 http://alexjacobson.com
More information about the Libraries