Hadrian Hughes

  1. Why you should always use guard statements

    The real world is messy, and real world software has to deal with that messiness. Guard statements are a pattern for performing complex checks without producing complex code.

  2. Understanding applicatives in Haskell

    Beyond just "functors with functions inside", applicatives enable abstraction and composition of complex behaviours in terms of simple functions.

  3. Parsing left-recursion by recursive descent

    Infinite recursion caused by left-recursive grammar is a common pitfall when implementing a recursive descent parser. By parsing to an intermediate representation and then reworking the result, you can overcome the problem while still producing the AST you actually want.

  4. On function composition in JavaScript

    There is a desire for new options for function composition in JavaScript, but what is the best approach, and why now?

  5. Software development is not like surgery

    In the operating theatre the surgeon never works alone. Should we as developers follow suit?