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.