Born English. Grew up Australian — got the accent to prove it. Dual citizen. Enjoys living in beautiful Brisbane but does still feel the tug of Ol’ Blighty — particularly my home town near Nottingham and Scotland.

I’m an avid computer programmer who loves programming languages. As an industry veteran of more than 25 years, I’ve used an multitude of languages: Ingres 4GL (don’t ask), C, Bourne Shell, Korn Shell, AWK, Perl 4, Delphi Object Pascal, C++, Python, Java, Ruby, JavaScript, C#, Scala, and now—finally—Haskell.

While I was using those languages in industry, I was learning about all sorts of other languages: Component Pascal, Oberon, Oberon-2, Modula-3, Mesa/Cedar, ALGOL, Eiffel, Sather, Icon, CLU, Smalltalk, Scheme, Goo, Dylan, EuLisp, Racket, Common Lisp, Shen, Slate, Io, Factor, Objective-C, APL, J, K, Q, Prolog, Caml, OCaml, F#, Standard ML, Mythryl, Mozart Oz, Alice ML, Erlang, Haskell, Idris, Coq, Agda, Ur, ATS, F*, Haxe, Elm, TypeScript, PureScript, Swift, Rust. Of course, my depth of study varied greatly. In fact, most of these languages I have learnt only superficially, often from research papers or books alone.

Thankfully, I’m working primarily in Haskell at the moment. I also like Idris, PureScript, and Scala. I’d definitely take on OCaml too, given the opportunity. I’ve more-or-less given up using Scala—though I still follow along with developments from time to time. I haven’t really gotten into PureScript as yet, though it looks enticing. Unfortunately, Idris isn’t ready for prime time, but I’m hopeful that this could change with the advent of Idris 2.0, and if a production-ready runtime-system materialises. I’ve done a bit of introductory work with Coq and Agda and have found it quite challenging. Wish I had more time to try out Rust for systems programming or gamedev.

Formative Years

I enjoyed programming for almost a decade prior to joining industry. I had heaps of fun starting with Basic on the Dick Smith Wizard in 82. By the time I got a Commodore 64, I was writing text-based adventures (aka “go north; get chalice”) in Basic, 2D sprite games in 6502 assembly, and experimenting with electronic music composition. I regret never upgrading to a Commodore Amiga as it seemed like an awesome platform for writing video games, demos and compilers. I didn’t own a PC until after university. While I was studying, I was fond of the terminal labs. At the time, I was quite partial to VAX/VMS and it’s DCL shell scripting language until I was introduced to UNIX with it’s Bourne and eventually Korn shells.


  • Programming languages: Programming Language Theory (PLT), TLC — Type Theory, Logic (i.e. Proof Theory), and Category Theory; Compilers and Runtime Systems; Program Verification and Mechanised Metatheory.
  • Application Development: trade-offs, tricks, patterns, the big-picture, dogma-slaying, and philosophy with coffee.
  • Systems:


  • Human languages: French, Spanish, and—once-up-a-time—Japanese.
  • Chess