24 September 2026
Tricorder MCP server: feedback your agent won't forget
Using Tricorder and its MCP server with coding agents.
24 September 2026
Using Tricorder and its MCP server with coding agents.
17 September 2026
An internship experience report on reenabling type class support in Liquid Haskell
18 June 2026
Here is how you can implement sheaves in Haskell
11 June 2026
A self-contained example showcasing formal verification using Liquid Haskell
8 January 2026
Announcing the Pup library.
11 September 2025
The story of how I implemented qualified aliases in Liquid Haskell
24 April 2025
The shortest megaparsec tutorial there is to write your first DSL parser
17 April 2025
Demonstrate the GHC wasm backend ghci browser mode and how it can be used to live-code a Haskell wasm frontend app.
20 March 2025
An overview of the improvements in the latest Liquid Haskell release
20 February 2025
cooked-validators is a Haskell library to write offchain code and conduct testing activities over Cardano smart contracts. One of its main features is to create fully-fledged transactions from simple declarative skeletons.
6 February 2025
An experience report of a somewhat large refactoring of Liquid Haskell
21 November 2024
A summary of the current support status of Template Haskell and ghci in GHC's wasm backend, explaining how it's implemented and laying out potential future improvements.
12 September 2024
Internship report: Extensions to the reflection mechanism of Liquid Haskell to handle functions from dependencies.
22 August 2024
A summary of the open-source work done by the Programming Languages & Compilers team at Tweag in the second quarter of 2024.
15 August 2024
A tale of optimising GHC by improving sharing in its intermediate representation.
30 May 2024
An experience report on plugin upgrades
7 March 2024
This blog post presents a safe API for destination-passing style programming using Linear Haskell against arbitrary functional data types.
18 January 2024
How GHC's design informs linear types
12 October 2023
Use monad-bayes and rhine in your interactive machine learning application
20 July 2023
A GHC pattern for improving the user experience of type-level programs
22 June 2023
A revamp of the mechanism for introducing assumptions
15 June 2023
A simple trick to fuzz Haskell programs with libFuzzer
8 June 2023
halide-haskell is a Haskell wrapper for Halide that allows you write and just-in-time compile high-performance array and image processing kernels.
1 June 2023
Translations of control flow can be tested before the rest of the code generator is ready. The tests examine sequences of abstract state transformations and observations.
11 May 2023
Embark with the High Assurance Software Group for a guided tour through the stages of a smart-contract audit, secret weapon included.
27 April 2023
Using type-level dependency tags to verify a Haskell pipeline.
13 April 2023
How to build state machines in a composable way, controlling which transitions can be executed
23 March 2023
How linear constraints get rid of scope functions and why it matters.
14 February 2023
Announcement of smtlib-backends, a Haskell library providing a generic interface for interacting with SMT solvers using SMT-LIB
31 January 2023
An experience report on improving HLS during my internship at Tweag.
26 January 2023
How a linear constraint arrow relates to freezing arrays in Haskell.
12 January 2023
Learning and adopting Haskell is not hard with the right resources at hand.
22 December 2022
How we gained 2–3% improvements in compile times by making GHC better at printing code.
8 December 2022
A practical introduction to using Sparkle to write Haskell programs which interface with Delta Lake.
22 November 2022
Announcing the GHC WebAssembly backend – present and future
15 November 2022
Introduction to staged programming in Haskell with typeclasses
10 November 2022
How to tap into the power of reinforcement learning while specifying and executing open games in Haskell.
8 November 2022
Understanding the basic ideas of functional programming by writing a program using only sets and functions
3 November 2022
Bazel avoids superfluous recompilation for free, but we can make it even better.
27 October 2022
Exploration of a regression in GHC's bytecode generator performance
20 October 2022
Painlessly switch your Haskell build from Cabal to Bazel
18 October 2022
My experience improving monad-bayes, the probabilistic programming language package, as a Tweag fellow.
14 October 2022
28 July 2022
Limitations of the GHC profiler and announcement of the timestats library
21 July 2022
New features to understand old verification failures
23 June 2022
Announcing the new haskell_module rule in rules_haskell
2 June 2022
Integrating Haskell Stack and Nix in a smooth yet non-invasive way, with an explanation, example and template.
12 May 2022
Arnaud takes a step back from the slogans and examines the trade-offs between lazy and strict languages.
5 May 2022
A presentation of an alternative encoding for optics such as lenses and prisms using existential types.
21 April 2022
Announcement of a WebAuthn Haskell library, and a description of how the protocol works
24 February 2022
Use records to structure your Servant APIs
17 February 2022
A tutorial on how to write a type-checking plugin for GHC
10 February 2022
Why formatting chains of infix operators is hard in Haskell. And how I addressed it for Ormolu.
26 January 2022
How to automatically inject attacks and faults in safety tests using random traces.
19 January 2022
On the relevance of Liquid Haskell in programming languages
5 January 2022
How to transparently separate resource allocation from business logic for scoped effects in Polysemy
9 December 2021
In part two of this series on type-checking plugins, we will see how GHC's constraint solver works.
25 November 2021
A collection of ways various Tweagers develop in Haskell
4 November 2021
Small tutorial on using valgrind to find hot spots in ghc and other Haskell programs
28 October 2021
An experience report on polishing Ormolu, the Haskell code formatter, during my internship at Tweag.
21 October 2021
Why would you want to write a type-checking plugin? Many limitations of the GHC type-checker are exposed here.
13 October 2021
Property test a denotational model of a data structure.
23 September 2021
Introducing a library for writing data pipelines which compose well and fail early
30 August 2021
Notes from the sixth day of ICFP
27 August 2021
Notes from the fifth day of ICFP
26 August 2021
Notes from the fourth day of ICFP
25 August 2021
Notes from the third day of ICFP
24 August 2021
Notes from the second day of ICFP
23 August 2021
Notes from the first day of ICFP
28 July 2021
Announcing the gazelle_cabal tool for automatic Bazel rules generation for Cabal projects
8 July 2021
What should the type of linear traverse be exactly?
23 June 2021
Deconstructing the various uses of type classes.
23 April 2021
Tweag is looking for interns who want to contribute to Ormolu.
15 April 2021
How to use lenses and other optics within an Arrow-based framework.
8 April 2021
Define effect interpreters dynamically using reflection
26 March 2021
Incubating the Haskell Foundation during 2020.
25 March 2021
Discussion on using Bazel with inline-java
10 February 2021
Announcing linear-base, a standard library for linearly typed Haskell programs.
29 January 2021
A call to action to improve GHC's performance via a paid internship
7 January 2021
How to break encapsulation and import a hidden value in Haskell.
3 December 2020
An applicative functor to define shrinkers
25 November 2020
Why Template Haskell is hard for cross compilation and how Asterius does it
11 November 2020
Destinations give you control over your memory allocations, and linear types make them pure.
9 October 2020
7 October 2020
Summary of the Tweag open source fellowship work related to ghcide
30 September 2020
Bazel gains support for creating fully statically linked Haskell binaries with rules_haskell and rules_nixpkgs.
13 July 2020
Announcement of the upcoming QualifiedDo language extension.
29 June 2020
How we ensured that the implementation of random v1.2 produces higher quality random numbers than v1.1.
19 June 2020
Looking back at the journey which brought us there, and forward to what still lies ahead.
11 June 2020
Benchmarks of inline-java and a discussion of its performance trade-offs.
6 May 2020
How to build a complete Haskell project with Bazel.
23 April 2020
How to derive instances via arbitrary isomorphisms.
16 April 2020
Imprecise, synchronous, asynchronous exceptions: what do they mean, and what to do with them.
2 April 2020
This blog post describes the tradeoffs of the choice between eager and lazy instantiation of type variables in GHC.
12 March 2020
During my internship, I implemented the explicit specificity proposal to make GHC type signatures complete.
5 March 2020
Peirce divides reasoning into three complementary processes: deduction, abduction and induction. In this post, I will show how these logical processes relate to software.
26 February 2020
In this blog post series, we're going to lead you through Bayesian modeling in Haskell with the monad-bayes library. In the third part of the series, we setup a simple Bayesian neural network.
19 February 2020
A primer on the interaction between linear types and exceptions in Haskell.
6 February 2020
In this post about inline-java I aim to walk you through the upcoming safe interface of the library, which allows detecting memory management mistakes at compile time using linear types.
30 January 2020
This post describes a profiling technique for Haskell codebases that yields faithful results and is well adapted to large repositories.
16 January 2020
Haskell's Data and Control module hierarchies have always bugged me. Now, I understand that the intuition behind the Data/Control separation is rooted in a deep technical justification.
19 December 2019
Asterius compiles Haskell code into WebAssembly code to be executed in a browser or in Node.js. It has reached a new milestone by being able to compile the diagrams library and its dependencies.
8 November 2019
Here's Part 2 in Tweag's Series about Bayesian modeling in Haskell with the monad-bayes library.
30 October 2019
We're happy to announce the first release of Porcupine, an open source framework to express portable and customizable data pipelines.
11 October 2019
We're happy to announce the first release of Ormolu, a formatter for Haskell source code.
9 October 2019
Bazel gets native support for third-party Haskell libraries and building Cabal packages since the 0.10 release of rules_haskell.
25 September 2019
I got the opportunity to work on Bazel's Persistent Worker Mode for GHC during my internship at Tweag. My goal was to improve the mode of communication between Bazel and the Haskell GHC compiler.
20 September 2019
In this blog post series, we're going to lead you through Bayesian modeling in Haskell with the monad-bayes library. In the first part of the series, we introduce two fundamental concepts of `monad-bayes`: `sampling` and `scoring`.
12 September 2019
I got the opportunity to work on Asterius, a new Haskell to WebAssembly compiler, during my internship at Tweag. My task was to get anything numerics-related stabilized in its compiled code.
6 September 2019
People keep asking me, “What's the point of Haskell, why do you folks even use it?”. How can you answer this?
27 June 2019
27 May 2019
9 May 2019
20 March 2019
There has been recent online discussions about impredicative encoding (aka final encoding) of free monads. Capabilities-as-type-classes, as embodied by the capability library, are essentially the same thing.
13 February 2019
23 January 2019
20 December 2018
4 October 2018
12 September 2018
10 July 2018
21 June 2018
29 May 2018
25 April 2018
17 April 2018
8 March 2018
28 February 2018
5 February 2018
21 December 2017
29 November 2017
16 November 2017
1 November 2017
27 October 2017
19 October 2017
12 October 2017
5 October 2017
27 September 2017
22 September 2017
15 September 2017
31 August 2017
24 August 2017
17 August 2017
9 August 2017
3 August 2017
27 July 2017
10 July 2017
13 March 2017
17 October 2016
20 June 2016
25 February 2016
9 December 2015
8 September 2015