I’m familiar with object-oriented architecture, including use of design patterns and class diagrams for visualization, and I know of service-oriented architecture with its contracts and protocol bindings, but is there anything characteristic about a software architecture for a system written in a functional programming language?
I know that FP has been used for medium-size to large scale projects. Paul Graham wrote the first incarnation of Yahoo! Store in Common Lisp. Some lisp development systems are complex. Artifical intelligence and financial systems written in functional languages can get pretty big. They all have at least some kind of inherent architecture, though, I’m wondering if they have anything in common?
What does an architecture based on the evaluation of expressions look like? Are FP architectures more composable?
Update: Kyle reminded me that SICP is a good resource for this subject.
Update 2: I found a good post on the subject: How does functional programming affect the structure of your code?
The common thread in the ‘architecture’ of projects that use functional languages is that they tend to be separated into layers of algebras rather than subsystems in the traditional systems architecture sense.
For great examples of such projects, check out XMonad, Yi, and HappS. If you examine how they are structured, you will find that they comprise layers of monadic structure with some combinator glue in between.
Also look at The Scala Experiment paper which outlines an architecture where a system is composed of components that abstract over their dependencies.