The siren song of domain-specific languages I’ve seen a lot of engineering teams mistakenly believe that they can author domain-specific languages for less technical users on a budget. In par...
https://www.haskellforall.com/2024/02/the-siren-song-of-domain-specific.html
Unification-free ("keyword") type checking From my perspective, one of the biggest open problems in implementing programming languages is how to add a type system to the language without signif...
https://www.haskellforall.com/2024/02/unification-free-keyword-type-checking.html
A GHC plugin for OpenTelemetry build metrics This post is about a new OpenTelemetry plugin for GHC that I’ve been building for work that we’re open sourcing because I think it might be br...
https://www.haskellforall.com/2023/10/a-ghc-plugin-for-opentelemetry-build.html
My views on NeoHaskell Recently Nick Seagull has announced a NeoHaskell project which (I believe) has generated some controversy. My first run-in with NeoHaskell was this post on cohost cri...
https://www.haskellforall.com/2023/10/my-views-on-neohaskell.html
GHC plugin for HLint At work I was recently experimenting with running hlint (the widely used Haskell linting program) as a GHC plugin . One reason why I was interested in this is because we ...
https://www.haskellforall.com/2023/09/ghc-plugin-for-hlint.html
Ergonomic newtypes for Haskell strings and numbers This blog post summarizes a very brief trick I commonly recommend whenever I see something like this: {-# LANGUAGE OverloadedStrings #-...
https://www.haskellforall.com/2023/04/ergonomic-newtypes-for-haskell-strings.html
The "open source native" principle for software design This post summarizes a software design principle I call the “open source native” principle which I’ve invoked a few times as a techn...
https://www.haskellforall.com/2023/03/the-open-source-native-principle-for.html
terraform-nixos-ng: Modern terraform support for NixOS Recently I’ve been working on writing a “NixOS in Production” book and one of the chapters I’m writing is on deploying NixOS usin...
https://www.haskellforall.com/2023/01/terraform-nixos-ng-modern-terraform.html
Announcing nixos-rebuild: a "new" deployment tool for NixOS The title of this post is tongue-in-cheek; nixos-rebuild is a tool that has been around for a long time and there’s nothing new abo...
https://www.haskellforall.com/2023/01/announcing-nixos-rebuild-new-deployment.html
macos-builder I recently upstreamed a derivation for a Linux builder into Nixpkgs that’s easy to deploy on macOS. The significance of this work is that you can now run the following command o...
https://www.haskellforall.com/2022/12/nixpkgs-support-for-linux-builders.html
incremental The context for this post is that at work I recently implemented Nix ecosystem support for “incrementally” building Haskell packages. By “incrementally” I mean that these Ni...
https://www.haskellforall.com/2022/12/nixpkgs-support-for-incremental-haskell.html
caching Professional Nix users often create a shared cache of Nix build products so that they can reuse build products created by continuous integration (CI). For example, CI might build Nix pr...
https://www.haskellforall.com/2022/10/how-to-correctly-cache-build-time.html
What does "isomorphic" mean (in Haskell) Sometimes you’ll hear someone describe two things as being “isomorphic” to one another and I wanted to explain what that means. You might have a...
https://www.haskellforall.com/2022/10/what-does-isomorphic-mean-in-haskell.html
nix-serve-ng Our team at Arista Networks is happy to announce nix-serve-ng, a backwards-compatible Haskell rewrite of nix-serve (a service for hosting a /nix/store as a binary cache). It prov...
https://www.haskellforall.com/2022/09/nix-serve-ng-faster-more-reliable-drop.html
Stop calling everything "Nix" One of my pet peeves is when people abuse the term “Nix” without qualification when trying to explain the various components of the Nix ecosystem. As a concr...
https://www.haskellforall.com/2022/08/stop-calling-everything-nix.html
incremental-nix This post walks through how to take a standalone Haskell file and progressively package the file using Nix. In other words, we will tour a spectrum of packaging options ranging ...
https://www.haskellforall.com/2022/08/incrementally-package-haskell-program.html
defaultable-map: An Applicative wrapper for Maps I’m announcing a small utility Haskell package I created that can wrap arbitrary Map-like types to provide Applicative and Alternative instanc...
https://www.haskellforall.com/2022/06/defaultable-map-applicative-wrapper-for.html
The appeal of bidirectional type-checking In this post I hope to explain why bidirectional type-checking has a lot of cultural cachet within the programming language theory community. To be cl...
https://www.haskellforall.com/2022/06/the-appeal-of-bidirectional-type.html
Generate web forms from pure functions This is an announcement post for my “Grace browser” project, which you can find here: trygrace.dev This project is a web page which can dynamically...
https://www.haskellforall.com/2022/05/generate-web-forms-from-pure-functions.html
golden-software-distro This is a short post documenting a pattern I learned as a user and maintainer of software distributions. I wanted to share this pattern because the lesson was non-obvious...
https://www.haskellforall.com/2022/05/the-golden-rule-of-software.html
Why does Haskell's take function accept insufficient elements? This post is a long-form response to a question on Reddit , which asked: > I just started learning haskell, and the take...
https://www.haskellforall.com/2022/05/why-does-haskells-take-function-accept.html
Introductory resources to type theory for language implementers This post briefly tours resources that helped introduce me to type theory, because I’m frequently asked by others for resources...
https://www.haskellforall.com/2022/05/introductory-resources-to-type-theory.html
Modeling PlusCal in Haskell using Cartesian products of NFAs PlusCal is a formal specification language created to model concurrent systems, and recently I became obsessed with implementing Pl...
https://www.haskellforall.com/2022/03/modeling-pluscal-in-haskell-using.html
The hard part of type-checking Nix I’ve been banging my head for a while on the challenge of building a type checker for Nix. The purpose of this post is to summarize my thoughts on this subj...
https://www.haskellforall.com/2022/03/the-hard-part-of-type-checking-nix.html
lift-monoid The gist of this post is that any type constructor F that implements Applicative: instance Applicative F where … … should usually also implement the following ...
https://www.haskellforall.com/2022/03/applicatives-should-usually-implement.html