Blog posts
Qualified Imports and Alias Resolution in Liquid HaskellSeptember 11, 2025
The minimal megaparsec tutorialApril 24, 2025
Frontend live-coding via ghciApril 17, 2025
A hundred pull requests for Liquid HaskellMarch 20, 2025
From minimal skeletons to comprehensive transactions with cooked-validatorsFebruary 20, 2025
The refactoring of a Haskell codebaseFebruary 06, 2025
GHC's wasm backend now supports Template Haskell and ghciNovember 21, 2024
Reflecting away from definitions in Liquid HaskellSeptember 12, 2024
Programming Languages & Compilers Activity Report - Q2 2024August 22, 2024
Let there be types: observable type sharing for GHC CoreAugust 15, 2024
Liquid Haskell through the compilersMay 30, 2024
Extending destination-passing style programming to arbitrary data types in Linear HaskellMarch 07, 2024
A look under GHC's hood: desugaring linear typesJanuary 18, 2024
rhine-bayes: a library for online reactive Bayesian inferenceOctober 12, 2023
How to Prevent GHC from Inferring Types with Undesirable ConstraintsJuly 20, 2023
Assumptions for Liquid Haskell in the largeJune 22, 2023
Coverage-guided fuzzing of Haskell programs for cheapJune 15, 2023
Announcing halide-haskell - a Haskell interface for the Halide image and array processing languageJune 08, 2023
Testing Control-Flow Translations in GHCJune 01, 2023
A journey through the auditing process of a smart contractMay 11, 2023
Type-safe data processing pipelinesApril 27, 2023
crem: compositional representable executable machinesApril 13, 2023
Linear Constraints: the problem with scopesMarch 23, 2023
smtlib-backends: faster SMT-LIB-based Haskell interface to SMT solversFebruary 14, 2023
A Semester of HLS: An Internship ReportJanuary 31, 2023
Linear Constraints: the problem with O(1) freezeJanuary 26, 2023
Haskell at WorkJanuary 12, 2023
Making GHC faster at emitting codeDecember 22, 2022
Creating a Delta Lake in Haskell with SparkleDecember 08, 2022
WebAssembly backend merged into GHCNovember 22, 2022
Staged programming with typeclassesNovember 15, 2022
Reinforcement Learning for Open GamesNovember 10, 2022
Functional programming from sets and functionsNovember 08, 2022
Recompilation avoidance in rules_haskellNovember 03, 2022
A nub in the haystackOctober 27, 2022
Converting a polyglot project build to Bazel: part 1October 20, 2022
Improving the Probabilistic Programming Language monad-bayesOctober 18, 2022
Testing stateful systems, part two: Linear Temporal LogicOctober 14, 2022
Profiling non-CPU time in HaskellJuly 28, 2022
A dialogue with Liquid HaskellJuly 21, 2022
Incremental builds for Haskell with BazelJune 23, 2022
Smooth, non-invasive Haskell Stack and Nix shell integrationJune 02, 2022
Comparing strict and lazyMay 12, 2022
Existential opticsMay 05, 2022
Announcing WebAuthnApril 21, 2022
Named Routes in ServantFebruary 24, 2022
Type-checking plugins, Part III: writing a type-checking pluginFebruary 17, 2022
Ormolu: the challenge of formatting operator chainsFebruary 10, 2022
A Case Study on Correctness and Safety Testing of Stateful SystemsJanuary 26, 2022
Why Liquid Haskell mattersJanuary 19, 2022
Scoped Effect Resources for PolysemyJanuary 05, 2022
Type-checking plugins, Part II: GHC's constraint solverDecember 09, 2021
The Varieties of the Haskelling ExperienceNovember 25, 2021
A Haskell memory leak in way too much detail with CachegrindNovember 04, 2021
Hacking on Ormolu: An internship reportOctober 28, 2021
Type-checking plugins, Part I: Why write a type-checking plugin?October 21, 2021
Denotational Homomorphic TestingOctober 13, 2021
Functional data pipelines with funflow2September 23, 2021
Daily ICFP: Day 5August 30, 2021
Daily ICFP: Day 4August 27, 2021
Daily ICFP: Day 3August 26, 2021
Daily ICFP: Day 2August 25, 2021
Daily ICFP: Day 1August 24, 2021
Daily ICFP: Day 0August 23, 2021
Convert Cabal-based projects to Bazel automaticallyJuly 28, 2021
Exploring linear Traversable using genericsJuly 08, 2021
Deconstructing classesJune 23, 2021
An AsciiDoc processor and Pandoc front-end in HaskellJune 15, 2021
Ormolu internshipApril 23, 2021
Arrows, through a different lensApril 15, 2021
Ad-hoc interpreters with capabilityApril 08, 2021
Incubating the Haskell FoundationMarch 26, 2021
How to build hybrid Haskell and Java programsMarch 25, 2021
linear-base makes writing Linear Haskell easy and funFebruary 10, 2021
Intern opening to improve GHC performanceJanuary 29, 2021
Haskell dark arts, part I: importing hidden valuesJanuary 07, 2021
The Shrinks ApplicativeDecember 03, 2020
A tale of Template Haskell and cross compilationNovember 25, 2020
Pure destination-passing style in Linear HaskellNovember 11, 2020
Edge computing with servant on CloudflareOctober 09, 2020
Making GHCIDE smarter and faster: a fellowship summaryOctober 07, 2020
Fully statically linked Haskell binaries with BazelSeptember 30, 2020
Qualified do: rebind your do-notation the right wayJuly 13, 2020
Splittable pseudo-random number generators in Haskell: random v1.1 and v1.2June 29, 2020
Linear types are merged in GHCJune 19, 2020
Calling to the JVM from Haskell: Some benchmarksJune 11, 2020
A taste of Bazel: build a library, a service and hspec testsMay 06, 2020
Deriving IsomorphicallyApril 23, 2020
The three kinds of Haskell exceptions and how to use themApril 16, 2020
Eager vs. Lazy Instantiation: Making an Informed DecisionApril 02, 2020
Inferred or Specified Types? Your Choice!March 12, 2020
Code is Engineering, Types are ScienceMarch 05, 2020
Probabilistic Programming with monad‑bayes, Part 3: A Bayesian Neural NetworkFebruary 26, 2020
On linear types and exceptionsFebruary 19, 2020
Safe memory management in inline-java using linear typesFebruary 06, 2020
Locating Performance Bottlenecks in Large Haskell codebasesJanuary 30, 2020
A Tale of Two Functors or: How I learned to Stop Worrying and Love Data and ControlJanuary 16, 2020
Haskell art in your browser with AsteriusDecember 19, 2019
Probabilistic Programming with monad‑bayes, Part 2: Linear RegressionNovember 08, 2019
Here You See the Small Porcupine Perched in Its Tree, Preparing and Crunching Some Data with MeOctober 30, 2019
Ormolu: Announcing First ReleaseOctober 11, 2019
Bazel, Cabal, Stack: Why choose when you can have them all?October 09, 2019
Bazel's Persistent Worker Mode for GHC: An Industrial InternshipSeptember 25, 2019
Probabilistic Programming with monad‑bayes, Part 1: First StepsSeptember 20, 2019
War Stories of Asterius: Numerics & DebuggingSeptember 12, 2019
Why Haskell is importantSeptember 06, 2019
CPP considered harmfulJune 27, 2019
Ormolu: Format Haskell code like never beforeMay 27, 2019
inline-js: seamless JavaScript/Haskell interopMay 09, 2019
Capability is about free monads. It's a bird… It's a plane… It's a free monad!March 20, 2019
The types got youFebruary 13, 2019
Towards Interactive Data Science in Haskell: Haskell in JupyterLabJanuary 23, 2019
Asterius GHC WebAssembly backend reaches TodoMVCDecember 20, 2018
capability: the ReaderT pattern without the boilerplateOctober 04, 2018
Haskell WebAssembly calling JavaScript and back againSeptember 12, 2018
Funflow Example: emulating MakeJuly 10, 2018
Streaming with linear typesJune 21, 2018
Fibonacci compiles end-to-end — Haskell to WebAssembly via GHCMay 29, 2018
Funflow: typed resumable workflowsApril 25, 2018
Stackage HEAD is now live!April 17, 2018
Implementing a safer sort with linear typesMarch 08, 2018
Build large polyglot projects with Bazel... now with Haskell supportFebruary 28, 2018
Free monads for cheap interpretersFebruary 05, 2018
All about reflection: a tutorialDecember 21, 2017
Making two garbage collectors be good neighbours (using linear types)November 29, 2017
Parallelising your array codeNovember 16, 2017
The Exodus to Streamgard, an epic poemNovember 01, 2017
Using Stackage for GHC regression testingOctober 27, 2017
Announcing the GHC DevOps GroupOctober 19, 2017
Array fusion with vectorOctober 12, 2017
How to compose streaming programsOctober 05, 2017
Immutability and unboxing in array programmingSeptember 27, 2017
GHC compiler plugins in the wild: typing JavaSeptember 22, 2017
Java from Haskell: a tutorialSeptember 15, 2017
Enter the matrix, Haskell styleAugust 31, 2017
Compact normal forms + linear types = efficient network communicationAugust 24, 2017
Diversity through inline codeAugust 17, 2017
Array programming in HaskellAugust 09, 2017
Encode state transitions in types using linear typesAugust 03, 2017
Streaming programs without laziness: a short primerJuly 27, 2017
R and Haskell: best of both worlds with HaskellRJuly 10, 2017
Linear types make performance more predictableMarch 13, 2017
A new ecosystem for Haskell: the JVMOctober 17, 2016
Haskell compute PaaS with sparkleJune 20, 2016
Haskell meets large scale distributed analyticsFebruary 25, 2016
Stack + Nix = portable reproducible buildsDecember 09, 2015
Programming R at native speed using HaskellSeptember 08, 2015