FP Complete Haskell posts, mirrored
This is an unofficial mirror. FP Complete’s websites (www.fpcomplete.com, tech.fpcomplete.com and later academy.fpblock.com) are offline as of November 2026, so this site republishes their technical Haskell writing from Wayback Machine captures to keep it readable. It is not run by or affiliated with FP Complete or FP Block.
The writing belongs to its authors. Every page names its author and links to its original URL and to the capture it was converted from. The conversion from HTML to Markdown can lose formatting, so check the capture when something looks off. If you wrote one of these posts and want it corrected or taken down, please open an issue.
Only the technical posts are here: 83 blog posts and 41 tutorial and library pages. Product announcements, release notes, job ads, surveys and company posts are left out. The repository keeps the raw captures of all 224 archived Haskell posts.
The search box at the top searches the full text of every page here, code included.
Exceptions and resource safety
Start with the 2018 post and haskell/tutorial/exceptions. The 2016 best practices post says it was folded into that tutorial, and haskell/library/safe-exceptions now points to UnliftIO.Exception.
| Date | Title | Author |
|---|---|---|
| 2016-06-29 | Announce: safe-exceptions, for async exception safety | Michael Snoyman |
| 2016-11-07 | Exceptions Best Practices in Haskell | Michael Snoyman |
| 2017-02-06 | MonadMask vs MonadBracket | Michael Snoyman |
| 2017-06-19 | Understanding ResourceT | Michael Snoyman |
| 2017-06-26 | A Tale of Two Brackets | Michael Snoyman |
| 2017-08-24 | Exiting a Haskell process | Michael Snoyman |
| 2018-04-26 | Asynchronous Exception Handling in Haskell | Michael Snoyman |
| 2018-10-04 | ResourceT: A necessary evil | Michael Snoyman |
| 2019-01-29 | Defining exceptions in Haskell | Chris Done |
| 2019-12-24 | Async Exceptions in Haskell, and Rust | Michael Snoyman |
| 2020-11-30 | Error handling is hard | Michael Snoyman |
Concurrency
| Date | Title | Author |
|---|---|---|
| 2016-06-20 | async exceptions, STM, and deadlocks | Michael Snoyman |
| 2016-11-22 | Comparative Concurrency with Haskell | Michael Snoyman |
| 2016-12-07 | Concurrency and Node | Andrew Rademacher |
| 2017-01-06 | Green Threads are like Garbage Collection | Michael Snoyman |
| 2018-05-09 | Pinpointing deadlocks in Haskell | Alexey Kuleshevich |
| 2020-01-27 | Transformations on Applicative Concurrent Computations | Román González |
Performance, strictness and memory
| Date | Title | Author |
|---|---|---|
| 2014-05-20 | vectorBuilder: packed-representation yielding for conduit | Michael Snoyman |
| 2014-08-21 | IAP: Speeding up conduit | Michael Snoyman |
| 2014-08-27 | IAP: conduit stream fusion | Michael Snoyman |
| 2015-01-07 | Announcing: mutable-containers 0.2 | Michael Snoyman |
| 2015-02-17 | Primitive Haskell | Michael Snoyman |
| 2015-04-27 | Flame graphs for GHC time profiles with ghc-prof-flamegraph | Francesco Mazzoli |
| 2016-03-14 | Efficient binary serialization | Michael Snoyman |
| 2016-05-24 | store: a new and efficient binary serialization library | Michael Sloan |
| 2016-05-27 | weigh: Measuring allocations in Haskell | Chris Done |
| 2017-01-18 | Speeding up a distributed computation in Haskell | Francesco Mazzoli |
| 2017-08-28 | All About Strictness | Michael Snoyman |
| 2018-03-15 | Without performance tests, we will have a bad time, forever | Niklas Hambüchen |
Application design and libraries
| Date | Title | Author |
|---|---|---|
| 2015-05-20 | Call C functions from Haskell without bindings | Francesco Mazzoli |
| 2017-02-24 | The typed-process library | Michael Snoyman |
| 2017-06-12 | The ReaderT Design Pattern | Michael Snoyman |
| 2017-07-17 | Announcing: the new unliftio library | Michael Snoyman |
| 2017-07-24 | The RIO Monad | Michael Snoyman |
| 2017-09-12 | Cryptographic Hashing in Haskell | Michael Snoyman |
| 2017-12-28 | Parsing command line arguments | Tom Sydney Kerckhove |
| 2018-05-01 | A new Haskell library for talking to ODBC databases | Chris Done |
| 2020-02-12 | Decimal Safety Right on The Money | Alexey Kuleshevich |
Language and types
| Date | Title | Author |
|---|---|---|
| 2012-08-22 | Ten Things You Should Know About Haskell Syntax | Bartosz Milewski |
| 2013-03-04 | Learning Haskell Through Koans | Chad Scherrer |
| 2013-06 | Haskell from C: Where are the for Loops? | Chad Scherrer |
| 2016-11-09 | Covariance and Contravariance | Michael Snoyman |
| 2017-02-13 | Immutability, Docker, and Haskell’s ST type | Michael Snoyman |
| 2017-03-10 | Partial patterns in do blocks: let vs return | Michael Snoyman |
| 2017-04-14 | What pure functional programming is all about: Part 1 | Chris Done |
| 2017-05-01 | What pure functional programming is all about: Part 2 | Chris Done |
| 2017-07-31 | To Void or to void | Michael Snoyman |
| 2018-01-02 | Weakly Typed Haskell | Michael Snoyman |
| 2019-12-30 | Teaching Haskell with Duet | Chris Done |
| 2020-12-14 | Pattern matching | Michael Snoyman |
| 2021-05-25 | Tying the Knot in Haskell | Michael Snoyman |
| 2022-04-27 | The Hidden Dangers of Haskell’s Ratio Type | Neil Mayhew |
Testing
| Date | Title | Author |
|---|---|---|
| 2017-01-24 | QuickCheck and Magic of Testing | Alexey Kuleshevich |
| 2019-02-13 | Randomization Testing for an SQL Translator | Alexey Kuleshevich |
| 2019-02-27 | QuickCheck, Hedgehog, Validity | Tom Sydney Kerckhove |
| 2019-05-29 | Faking SQL Server in Haskell | Chris Done |
Web and Yesod
| Date | Title | Author |
|---|---|---|
| 2012-10-01 | Yesod Tutorial 1. My First Web Site | Bartosz Milewski |
| 2012-10-01 | Yesod Tutorial 2. Playing with Routes and Links | Bartosz Milewski |
| 2021-04-26 | The Pains of Path Parsing | Michael Snoyman |
Practical programs, scripts and files
| Date | Title | Author |
|---|---|---|
| 2014-03-20 | Monte carlo analysis in Haskell | Michael Snoyman |
| 2016-08-11 | Practical Haskell: Bitrot-free Scripts | Michael Snoyman |
| 2016-09-14 | Practical Haskell: Simple File Mirror (Part 1) | Michael Snoyman |
| 2016-09-14 | Working with data in Haskell | Chris Done |
| 2016-09-21 | Practical Haskell: Simple File Mirror (Part 2) | Michael Snoyman |
| 2016-11-22 | Scripting in Haskell | Chris Done |
| 2019-03-12 | Enhancing File Durability in Your Programs | Roman Gonzalez |
| 2019-07-01 | When children processes exit - a debugging story | Michael Snoyman |
Building and deploying
| Date | Title | Author |
|---|---|---|
| 2015-05 | Haskell Web Server in a 5MB Docker Image | |
| 2015-12-15 | The split-image approach to building minimal runtime Docker images | Emanuel Borsboom |
| 2016-10-07 | Static compilation with Stack | Tim Dysinger |
| 2017-07-13 | Stack’s New Extensible Snapshots | Michael Snoyman |
| 2017-12-21 | Building Haskell Apps with Docker | Deni Bertovic |
| 2018-07-19 | Pantry, part 1: The Package Index | Michael Snoyman |
| 2018-07-23 | Pantry, part 2: Trees and keys | Michael Snoyman |
| 2018-08 | Pantry, part 3: Specifying Dependencies | |
| 2018-08-23 | Haskell Development Workflows (4 ways) | Roman Gonzalez |
| 2020-03-04 | Storing generated cabal files | Michael Snoyman |
Haskell and Rust
| Date | Title | Author |
|---|---|---|
| 2017-07-10 | Iterators and Streams in Rust and Haskell | Michael Snoyman |
| 2018-07-30 | Streaming UTF-8 in Haskell and Rust | Michael Snoyman |
| 2019-01-17 | When Rust is safer than Haskell | Michael Snoyman |
| 2020-10-06 | Collect in Rust, traverse in Haskell and Scala | Michael Snoyman |
| 2021-01-11 | Philosophies of Rust and Haskell | Michael Snoyman |
| 2025-06-30 | Reflections on Haskell and Rust | Sibi Prabakaran |
Tutorials and library guides
From the Haskell section of the site. These pages have no byline, so no date or author.
| Page | Title |
|---|---|
haskell/library/aeson |
aeson: Working with JSON data |
haskell/library/async |
async: Asynchronous and Concurrent Programming |
haskell/library/binary |
binary: Serializing data |
haskell/library/conduit |
conduit: Streaming data |
haskell/library/containers |
containers: Maps, Sets, and more |
haskell/library/gauge |
gauge: Benchmarking |
haskell/library/hspec |
hspec: Testing framework |
haskell/library/http-client |
http-client: Making HTTP requests |
haskell/library/optparse-applicative |
optparse-applicative: Command line options parsing |
haskell/library/rio |
rio: A standard library |
haskell/library/safe-exceptions |
safe-exceptions: Safe and simple exception handling |
haskell/library/stm |
stm: Software Transactional Memory |
haskell/library/transformers |
transformers: Monad transformers |
haskell/library/typed-process |
typed-process: Run and interact with child processes |
haskell/library/unliftio |
unliftio: Lifting and unlifting IO actions |
haskell/library/vector |
vector: Efficient Packed-Memory Data Representations |
haskell/library/weigh |
weigh: Memory benchmarking |
haskell/library/yaml |
yaml: Parsing and rendering YAML |
haskell/syllabus |
Applied Haskell Syllabus |
haskell/tutorial/all-about-strictness |
All about strictness |
haskell/tutorial/applicative-syntax |
Crash Course to Applicative Syntax |
haskell/tutorial/applied-haskell-101 |
Applied Haskell 101 |
haskell/tutorial/best-practices |
Haskell Best Practices |
haskell/tutorial/common-typeclasses |
Common Typeclasses |
haskell/tutorial/data-structures |
Data Structures |
haskell/tutorial/data-types |
Data types |
haskell/tutorial/exceptions |
Safe exception handling |
haskell/tutorial/fundeps |
Functional Dependencies |
haskell/tutorial/lens |
Lenses |
haskell/tutorial/libraries |
Recommended Haskell libraries |
haskell/tutorial/monad-transformers |
Monad Transformers |
haskell/tutorial/mutable-variables |
Mutable variables |
haskell/tutorial/operators |
Operator Glossary |
haskell/tutorial/primitive-haskell |
Primitive Haskell |
haskell/tutorial/profiling |
Profiling and Performance |
haskell/tutorial/stack-build |
How to Build with Stack |
haskell/tutorial/stack-play |
How to Play with Stack |
haskell/tutorial/stack-script |
How to Script with Stack |
haskell/tutorial/string-types |
String Types |
haskell/tutorial/synonyms |
Synonyms in base |
haskell/tutorial/web-services |
Web Services |