[Haskell-cafe] 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:

HAppS Changes
* 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
   absolute URLs.

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 
application datatypes.


S. Alexander Jacobson tel:917-770-6565 http://alexjacobson.com

More information about the Haskell-Cafe mailing list