• Coding without implementation

    Ever since discovering the joy that is Haskell I have wondered how long it would be until we, as programmers and software engineers, would do away with hand-coded implementations. The Haskell type-system and general language design made it apparent to me that implementing functions by hand would one day become a relic of a bygone era. Instead, we would just think about types. Well, perhaps anyway. I think we’ve seen a glimpse of this future with the development of LLMs, where AI can generate most basic and trivial function definitions. However, I feel that most people are not taking advantage of the power here because they are using the wrong languages and type-systems.

  • Two Types of TDD

    Test Driven Development has gotten a large amount of attention over the years, probably too much attention. I think there is a better way of developing software, and it funnily enough has the same acronym. Let’s look at both types of software-development practice.

  • A Steelman Anti-TDD Argument

    I’ve seen lots of arguments, good and bad, for and against Test Driven Development. And this topic has recently come up again on LinkedIn after Jason Gorman[1] brought up a 2015 study[2] showing only 1.7% of developers actually practice TDD (I’m not surprised based on my anecdotal experience). In any case, both sides of the TDD divide love a good strawman. So I want here to present the best argument I can think of against TDD. And I do this as someone who loves writing tests, and thinks there is much value in a test-first approach to testing.

  • Domain Modelling with Category Theory

    Gandalf finds himself sitting at his computer one rainy Wednesday and in a moment of procrastination loads up his favourite online staff shop. He finds the latest newly released staff, that all his wizarding friends have been raving about, and loads the product page. His mouse tantalizingly hovers over the “add to basket” button until his impulsiveness gets the better of him and… he clicks.

  • Generate Random Data in Rust

    Are you looking to generate random data for testing or demo purposes? Look no further than Rust, a systems programming language that provides excellent memory safety and performance. In this tutorial, we’ll walk through the steps of using Rust’s rand::distributions library to generate random sensor data and write it to a CSV file.

  • Build a HTTP Proxy in Haskell on AWS Lambda

    This is just a quick one to put some Haskell code on AWS Lambda, and what’s better than a good-old HTTP Proxy?

  • Haskell Through Example: ReaderT

    Scenario: Suppose we have a config object for which we only want to pull off certain values.

  • Types and Minds

    Various philosophers (see Chomsky, Fodor, McGinn) have expressed the view that science and human knowledge are limited because human minds/brains are limited. There will just always be things that we cannot know because of the species we are. This view has received some criticism, notably from the philosopher Daniel Dennett. Recapping the logic if this position, Dennett says:

  • TDD + TDD = TTDD

    The mantra of Test Driven Development is Red, Green, Refactor.

  • Data Constructors Are Functions

    Thanks to Iceland Jack for this one. This post is me turning Iceland Jack’s thread into a blog post.

  • Compose for Speed

    A common functional pattern, for lack of a better word, is to compose various functions together. This is often seen as an elegant way of combining multiple operations on a single data structure. But another advantage of composition is that it allows us to write faster, more efficient code.