The implementation consists of the following high level units:
- Config file parser (produces an internal representation of all services)
- Service constructor (converts internal representation into executable functions)
- Translation and Execution combinators (building blocks for services, used by #2)
- Front End (interfaces to server framework)
- Combinators use the Arrow interface so the resulting service is described very much like a little data flow system. Description of Arrows as combinators can be found here
- Laziness has interesting consequences and drawbacks, such as making sure a database result set is evaluated before the database connection is closed or garbage collected.