Software Design and Architecture in Haskell
A structured set of materials on how to build real-world applications in Haskell.
Table of Contents
- Books on Software Architecture in Haskell
- Application Architectures
- Design Approaches and Design Patterns
- Design Principles
- Philosophy
- Best Practices & Guidelines
- Showcase Projects & Code Organization Samples
- Haskell in Production. Success Stories, Experience Reports
- Talks
- Haskell Ecosystem and Accessibility
- Misc
Books on Software Architecture in Haskell
- Functional Design and Architecture | Alexander Granin
- Practical Haskell. A Real World Guide to Programming | Serrano, Alejandro
- Real World Haskell | Bryan O'Sullivan, Don Stewart, John Goerzen
- Up-to-date Real World Haskell | Bryan O'Sullivan, Don Stewart, John Goerzen, Tae Sandoval
- Haskell Design Patterns | Ryan Lemmer
Application Architectures
- Three Layer Haskell Cake | Matt Parsons
- A Modern Architecture for FP | John A De Goes
- Modern Functional Programming: Part 2 | John A De Goes
- Anatomy of a Haskell-based Application | abailly
- Architecture of a Real World Haskell Application | Michael Oswald
- Functional architecture - The pits of success | Mark Seemann | NDC Sidney 2016
- Hierarchical Free Monads: The Most Developed Approach In Haskell (And The Death Of Final Tagless) | Alexander Granin
- Hierarchical Free Monads and Software Design in Functional Programming (Talk) | Slides | Alexander Granin | FunctionalConf 2019, Bangalore, India
- Hexagonal Architecture and Free Monad: Two related design patterns? | Quentin Duval
- Large-scale design in Haskell? (SO question)
Design Approaches and Design Patterns
Free Monads
- Why free monads matter | Gabriel Gonzalez
- Free monads in 7 easy steps | joa
- A Modern Architecture for FP | John A De Goes
- Building network actors with Node Framework | Alexander Granin | Note: a Free monadic architecture is described there.
- Automatic White-Box Testing with Free Monads | Alexander Granin | Showcase
- Hierarchical Free Monads: The Most Developed Approach In Haskell (And The Death Of Final Tagless) | Alexander Granin
- Hierarchical Free Monads and Software Design in Functional Programming (Talk) | Slides | Alexander Granin | FunctionalConf 2019, Bangalore, India
- Functional Design and Architecture (Book) | Alexander Granin | Note: the whole book is about different aspects of the Free monadic architecture.
- Strict typing fun example — Free Monads in Haskell | Kamil Ciemniewski
- Free Monads: from the basics to the implementation of composable and effectful stream processing | Quentin Duval
- What does Free buy us? | Matt Parsons
- Combining free monads in Haskell | Mark Seemann
- Free monad considered harmful | Mark Karpov
- What is the “Free Monad + Interpreter” pattern? (SO question)
- A Practical Introduction to Freer Monads (Eff) | Keagan McClelland
Final Tagless / mtl
- Tagless Final Encoding in Haskell | Juan Pablo Royo
- Introduction to Tagless Final | Vasiliy Kevroletin | Serokell
- Reducing boilerplate in finally tagless style | Roman Cheplyaka
- Tagless Final Encoding of a Test Language | Oskar Wickström
Effect Systems
- Eff to the Rescue! | Monday Morning Haskell
- Freer doesn’t come for free | Eric Torreborre
- Serving HTTP Content with Fused-Effects | Patrick Thomson
- A Practical Introduction to Freer Monads (Eff) | Keagan McClelland
ReaderT Pattern
- The ReaderT Design Pattern | Michael Snoyman
- The ReaderT design pattern or tagless final? | Magnus Therning
- Capability: The ReaderT Pattern Without The Boilerplate | Andreas Herrmann, Arnaud Spiwack | Tweag.IO
Service Handle Pattern
- The Service Pattern | Simon Meier
- Haskell Design Patterns: The Handle Pattern | Jasper Van der Jeugt
Other Patterns
- Haskell Design Patterns (Book) | Ryan Lemmer
- Enterprise Haskell Pattern: Lensed Reader | Michael Xavier
- The Has Type Class Pattern | Jonathan Fischoff
- Type Class Patterns and Anti-patterns | Jonathan Fischoff
OOP Design Patterns vs FP Design Patterns
Comparison of Approaches
- Which Type-Safe Database Library Should You Use? | William Yao
- Final Tagless vs Free Monad (Talk, Rus) | Slides (Eng) | Alexander Granin | FPure 2019, Kazan
- Monad transformers, free monads, mtl, laws and a new approach | Oliver Charles
- Backpack for initial and final encodings | qfpl
- Capability: The ReaderT Pattern Without The Boilerplate | Andreas Herrmann, Arnaud Spiwack | Tweag.io
Comparison Table
Separate page:
Philosophy
- Boring Haskell Manifesto | Michael Snoyman | Reddit discussion
- The Haskell Pyramid | Patrick
- My thoughts on Haskell in 2020 | Marco Sampellegrini
- Write Junior Code | Matt Parsons
- Fancy Haskell | Dan Fithian
- Simple Haskell Is Best Haskell | Sam Halliday
- On Marketing Haskell | Stephen Diehl
Design Principles
Note. It's a big void here in these topics. We don't have any good materials about Design Principles applicable to Haskell.
- Inversion of Control
- Dependency Injection
- Low Coupling / High Cohesion
- Rule of Least Power / Law of Demeter
- SOLID
- KISS
- YAGNI
- DRY
Best Practices & Guidelines
- Figuring Out How To Use Beam For DB Migrations | Willam Yao
- Making a small Haskell application | Morten Kolstad
- Haskell practices | freckle
- An opinionated guide to Haskell in 2018 | Lexi Lambda
- Getting things done in Haskell (Talk) | Jasper Van der Jeugt | HaskellerZ, Feb 2018
- Working around Haskell's namespace problem for records | Moritz Clasmeier
- Exceptions
- Exceptions Best Practices in Haskell | Michael Snoyman | FP Complete
- Style Guides
Showcase Projects & Code Orgranization Samples
Separate page:
Haskell in Production. Success Stories, Experience Reports
- The Joy and Agony of Haskell in Production | Stephen Diehl
- Haskell is Not For Production and Other Tales (Talk) | Katie Miller | Linux.conf.au 2016 | Geelong, Australia
- Production Haskell (Talk) | Reid Draper
- Haskell in Production | Felix Mulder
- Haskell in Production | Hasura.IO
- 5 Years of Haskell in Production (Talk) | Alexander Thiemann
- Retrospective: Haskell in Production | Sergio De Simone
- My “Haskell In Production” Story | David Joyner
Talks
- Getting things done in Haskell (Talk) | Jasper Van der Jeugt | HaskellerZ, Feb 2018
- Your Second Haskell Web App—A Yesod Workshop with Michael Snoyman | Michael Snoyman
- Functional architecture - The pits of success | Mark Seemann | NDC Sidney 2016
- Hierarchical Free Monads and Software Design in Functional Programming (Talk) | Slides | Alexander Granin | FunctionalConf 2019, Bangalore, India
- Final Tagless vs Free Monad (Talk, Rus) | Slides (Eng) | Alexander Granin | FPure 2019, Kazan
- Haskell is Not For Production and Other Tales (Talk) | Katie Miller | Linux.conf.au 2016 | Geelong, Australia
- Production Haskell (Talk) | Reid Draper
- 5 Years of Haskell in Production (Talk) | Alexander Thiemann
Haskell Ecosystem and Accessibility
This section is aimed to show that learning and using Haskell is not as horrible as some folks are trying to claim.
Haskell Ecosystem and Community
- State of the Haskell ecosystem | Gabriel Gonzalez
- 2017 State of Haskell Survey results | Taylor Fausak
- 2018 State of Haskell Survey results | Taylor Fausak
- 2019 State of Haskell Survey results | Taylor Fausak
- The Haskell Pyramid | Patrick
- Haskell Survey Results 2018 (FP Complete) | FP Complete
Haskell Learn: Books
- Get Programming with Haskell | Will Kurt
- Haskell in Depth | Vitaly Bragilevsky
- What I Wish I Knew When Learning Haskell | Stephen Diehl
- Haskell from the Very Beginning | John Whitington
- Learn You a Haskell for Great Good! | Miran Lipovača
- Programming in Haskell | Graham Hutton
- Beginning Haskell: A Project-Based Approach | Serrano, Alejandro
- Practical Haskell. A Real World Guide to Programming | Serrano, Alejandro
- Parallel and Concurrent Programming in Haskell: Techniques for Multicore and Multithreaded Programming | Simon Marlow
- Real World Haskell | Bryan O'Sullivan, Don Stewart, John Goerzen
- Haskell Design Patterns (Book) | Ryan Lemmer
- Functional Design and Architecture | Alexander Granin
- Thinking with Types. Type-Level Programming in Haskell | Sandy Maguire
- Haskell Programming from First Principles (aka Haskell Book) | Chistopher Allen, Julie Moronuki
- Optics by example | Chris Penner
- The Haskell School of Music: From Signals to Symphonies | Paul Hudak, Donya Quick
- Algorithm Design with Haskell | Richard Bird, Jeremy Gibbons
- Thinking Functionally with Haskell | Richard Bird
- Haskell: The Craft of Functional Programming | Simon Thompson
- Practical Web Development with Haskell | Ecky Putrady