I'm currently writing a book with the title "Functional Design and Architecture". It provides you with a complete set of techniques how to build a big application using pure functional approach. It describes many functional patterns and ideas while building an SCADA-like application 'Andromeda' for controlling spaceships from scratch. My primary language is Haskell. The book covers:
- Approaches to architecture modelling using diagrams;
- Requirements analysis;
- Embedded DSL domain modelling;
- External DSL design and implementation;
- Monads as subsystems with effects;
- Free monads as functional interfaces;
- Arrowised eDSLs;
- Inversion of Control using Free monadic eDSLs;
- Software Transactional Memory;
- Lenses;
- State, Reader, Writer, RWS, ST monads;
- Impure state: IORef, MVar, STM;
- Multithreading and concurrent domain modelling;
- GUI;
- Applicability of mainstream techniques and approaches such as UML, SOLID, GRASP;
- Interaction with impure subsystems.
You may get familiar with the code for the book here, and the 'Andromeda' project code.
I expect to finish this book at the end of 2017. Until that happens, you may read my article "Design and Architecture in Functional Programming" (Rus) here.
UPDATE
I shared my book online (first 5 chapters). See post on Reddit