Hi, I'm Noel Welsh. I write software and books, and work on other projects in the software space.

Latest Writing

  • Direct-style Effects in Scala
    17 April 2024

    What are direct-style effects, why should we care about them, and how can we implement them in Scala? These are three questions this post addresses.

    Continue reading

  • Understanding Virtual Machine Dispatch through Duality
    19 December 2023

    For the next edition of Scala with Cats I'm writing a section on implementing interpreters. In my research I ended up going fairly deep down the rabbit hole of optimizations, in which virtual machine dispatch is a major area. There are many different approaches to dispatch, and I struggled to relate them until I realized they were all variations on a basic structure that resulted from applying the principle of duality. Duality is one of the major themes of the book, so I was happy to make this discovery. However I think going deep into optimization is not appropriate for the book so I'm writing this up here instead.

    Continue reading

  • ScalaBridge in 2023
    07 June 2023

    ScalaBridge London is a community for learning Scala, for people who are underrepresented in technology. We last met in 2020, stopping when COVID made it impossible to continue. I want to restart ScalaBridge London. Here's the plan. If you'd like to take part, please signup.

    Continue reading

  • Scala with Cats, Creative Scala, and Scala 3
    17 May 2023

    I'm rewriting my books to include new material and target Scala 3. I'm opening sponsors so you can encourage me to finish faster.

    Continue reading

  • Functional Programming is Based
    06 March 2023

    Function programming is based1; that is, based on principles that allow a systematic and repeatable process for creating software. In this post I'm going illustrate this process with an example of summing the elements of a list, inspired by this conversation. We'll mostly be looking at algebraic data types and structural recursion (which often uses pattern matching, but is not synonymous with it).

    For me, a working functional programmer, this process is one of the main advantages of FP. It means I can spend my mental cycles on understanding the problem, knowing that once I have done so the implementation follows in a straightforward way. The inverse also holds: if someone uses these principles to write code I can easily work out what problem it solves.

    Continue reading