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 framework.

* 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.



-Alex-


______________________________________________________________ S. Alexander Jacobson tel:917-770-6565 http://alexjacobson.com _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to