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