Announcing ebird-haskell

Haskell libraries for working with eBird data and the public eBird API

November 27, 2023

I have officially released ebird-haskell: a set of libraries and tools for working with eBird data in Haskell. Specifically, there are three components:

  1. ebird-api: A library that provides a complete description of the public eBird API as a servant API type. It also provides types for the litany of values that the eBird API communicates in, and convenient instances and functions for operating on those types.
  2. ebird-client: A library that provides functions for querying any endpoint of the eBird API, based on the description in the ebird-api library.
  3. ebird-cli: An executable command-line utility that can query any endpoint of the eBird API and pretty-print the response data.

This post serves as announcement of these tools (a “call for users”, if you will) and an informal tutorial to help birders turned Haskell programmers or Haskell programmers turned birders get started.

An in-depth tour of the GHC specialiser

Feeling ad-hoc? Let this post specialise you.

October 10, 2023

Reducing Haddock's Memory Usage

A cross-post of my blog post for Well-Typed

October 6, 2023

This is a cross-post containing the introduction of a post I authored for Well-Typed. Read the whole post on Well-Typed’s blog.

Haddock is the documentation generation tool for Haskell. Given a set of Haskell modules, Haddock can generate documentation for those modules in various formats based on specially formatted comments in the source code. Haddock is a very important part of the Haskell ecosystem, as many authors and users of Haskell software rely on Haddock-generated documentation to familiarize themselves with the code.

Recently, Mercury asked us to investigate performance problems in Haddock that were preventing their developers from using it effectively. In particular, when running on Mercury’s code, Haddock would eat up all of the memory on 64GB machines. This made it difficult for their developers to generate documentation to browse locally.

At a high level, the work covered by this post has resulted in Haddock’s memory usage being roughly halved. The full set of Haddock and GHC changes resulting in these improvements will be shipped with GHC 9.8.

All this profiling and debugging work was completed using the eventlog2html and ghc-debug tools, which are excellent for characterising and diagnosing Haskell program performance. However, these are much less widely known than they deserve to be. This post aims to act as a case study demonstrating how we have used the tools to make significant performance improvements to a complex, real-world application.

… Continue reading on Well-Typed’s blog.

A GHC plugin that detects overloaded calls

Shedding some light on ad-hoc polymorphism

September 27, 2023

Coming soon!

A website appears

Introducing my new personal website

September 26, 2023

I’m staking my claim on the World Wide Web. It took me a while, but I’ve finally done it and I’m proud of the result. is now the home all things me; my professional journey as a software developer, and my amateur journey as a photographer/musician/frisbee thrower. In this post, I’ll write about the priorities I have this website and how the implementation addresses those. and I’ll attempt to explain how I implemented those it using Hakyll, the Haskell static site generator library.