Web/Frameworks/HAppS
Note: HAppS is now unmaintained and out of date. See Happstack
HAppS (short for Haskell Application Server) is a web framework.
Features:
- monadic framework for ACID transactions
- an HTTP server (outperforms Apache/PHP in informal benchmarks)
- SMTP server and mail delivery agent
- DNS resolver in pure Haskell
- XML and XSLT support.
Disadvantages:
- By using HAppS's state management, you are committing yourself to keeping your entire state in memory at all times, rather than disk -- YOUR STATE MUST ALWAYS FIT IN MEMORY
- Nearly undocumented, rapidly changing. Since there is little documentation, you may find yourself looking at blog post tutorials, but since it is rapidly changing, about half of these tutorials are out of date.
- Large set of available library functions. You don't need most of them, but because documentation is poor, it can be intimidating.
Introductions to the big idea:
- HAppS was inspired by Prevayler. The following excerpt from http://www.prevayler.org/wiki/ explains the big idea:
"...data is kept hot in Memory with changes journaled for system recovery.
Prevayler' s architecture is illustrated in the diagram shown here. Prevayler [1] serves as a transactional barrier for the business objects [2] of your application, held in Memory. You encapsulate all modifications of your business objects into instances of the Transaction interface [3], much like a " command " pattern (though different from a command in some details of the pattern). Whenever you ask Prevayler to execute a transaction on your business objects [4], Prevayler first writes the transaction object to a journal [5] so that data is not lost if your system crashes. Prevayler can also write a snapshot of your entire business object graph [6] as often as you wish. Prevayler uses the latest snapshot together with the journals to automatically recover your business objects from disk [7] on application startup by restoring the snapshot and then re-executing every transaction that was originally executed after that snapshot was taken." (see the diagram at [1])
- Very informative video presentation by Alex Jacobson to BayFP: http://www.bayfp.org/blog/2007/10/16/alex-jacobson-on-happs-videos-slides/
Tutorials / tutorial blog posts / examples:
- HAppS_tutorial2
- http://softwaresimply.blogspot.com/search/label/happs
- http://dbpatterson.com/articles/5
- http://happs.org/HAppS/HAppS-Begin/public/
- http://groups.google.com/group/HAppS/msg/7a5b25bf6b5b2285
- http://www.happstutorial.com:5001/
- http://src.seereason.com/happs-logon-example/
Combining HAppS with other stuff:
- Formlets: http://blog.tupil.com/formlets-in-haskell/
- HSP: http://groups.google.com/group/HAppS/browse_thread/thread/c2f58dc5a6503bf7
- Asterisk: http://nhlab.blogspot.com/2008/07/extending-asterisk-with-happs.html
Websites using HAppS:
Other lists of HAppS links:
Old, out-of-date tutorials:
Email list: http://groups.google.com/group/HAppS
IRC logs: http://tuukka.iki.fi/tmp/logindex
Some of the devs:
- Lemmih
- http://groups.google.com/groups/profile?enc_user=yBFxyxUAAAAmB_yb8VbTfVtwU9Ww1sJkfCy8ocgRtCJ7uxDEly48KQ
For alternatives to HAppS, see Applications_and_libraries/Web_programming.