WASH
Architecture
- HTML
- The output page and its elements are all created with Haskell data constructors.
These are assembled within the HTML monad, which utilises Haskell's type system to ensure a valid document.
- Alternatively, a preprocesser can be utilised to incorporate literal HTML into the Haskell source.
- Widgets
- Form widgets return a handle to the monad, which is initially type-tagged as invalid.
- The CGI Monad
- Callbacks can be attached to a form's submit button, or individual fields.
When the client submits a form, the widget handle(s) are passed to the callback as a parameter, type-tagged as valid.
State
WASH maintains an interaction log of all the program's interactions in hidden fields.
As Haskell is purely functional, the log can be replayed at any time to recover the current state.
Source Files
The entire source is a single Haskell program, Main.hs.
Deployment
The compiled executable is copied into the server's CGI directory.
Tools
There is no actively maintained IDE for haskell; Emacs or some other generic programmer's editor
is typically used with a batch compiler, such as GHC.