Walter Schulze

awalterschulze @ gmail

I started work at Facebook in October 2018. At home I program using Haskell, where I attempt a Phd as a hobby, while maintaining several open source projects. My MSc (cum laude) in Computer Science focused on using HMMs for Music Generation. I have also created a validation language using Brzozowski Derivatives to validate millions of deeply nested structures per second. My current studies focuses on formalizing and extending this language.

I am originally from South Africa, but in 2016 I moved to Amsterdam, The Netherlands and since 2018 I live in London, UK.

My full CV is available here.


I maintian a list of videos, playlists, blog posts, papers, books, etc. that I have learned from and still intend to learn from. Mostly about programming languages and math.

I am currently busy learning about Dependent Types in a reading group, where we are reading The Little Typer. I am also attempting to complete some exercises for each chapter.

Before, I was busy learning Category Theory in a reading group, where we were reading Category Theory for Programmers by Bartosz Milewski. I also attempted to answer the challenges for each chapter.

Last year, I also learned about unification by implementing a version of minikanren in Go.


A Programmer’s Regret: Neglecting Math at University. This post received over 200 points on Hacker News, with a top rank of 12. It also received over 1300 points on r/learnprogramming. This resulted in over 10000 visitors in one week.

Monads for Go Programmers. It received a 100 points on Reddit, which included it being at the top* of r/haskell for a while and it was also featured in the golangweekly newsletter.

For Sum Types: Golang's multiple return parameters are overrated. A go experience report about how I wish go chose sum types over multiple return parameters for handling errors.


A Talk on Ragalur Expressions. Explains Brzozowski Derivatives and how we can use them toghether with other functional concepts such as laziness, memoization and least fixed points to generate Ragas (classical indian music). This is finally demostrated using a Max MSP plugin in Ableton Live.

picolang A functional programming language for working with pico services.

Elm - Frontends for Backend Developers

PhD as a Hobby

Katydid is an encoding agnostic validation langauge.

The language includes a playground and a tour.

This language has been implemented as a library in Haskell and Go.

Open Source

GoGoProtobuf: Protocol Buffers for Go with Gadgets.

A fork of Google's protocol buffer generator and library for Go. GoGoProtobuf is faster and more user friendly. I created and maintained this project until August of 2018, when I handed it over to some amazing new maintainers. During my time, it had received over 1700 stars and was used by Docker, Dropbox, Kubernetes, etcd, to name but a few.

GoDerive derives and generates golang functions from input types. These include monadic and concurrent functions. It has received over 600 stars, because it trended on github, was published in the golangweekly newsletter and redit also found it funny.

GoGraphviz: Go Parser for Graphviz's Dot Format.

Music Generation for a Masters

Artists have many influences which they have accumulated over the years by listening to countless pieces of music, this principle is reflected in SuperWillow. The computer analyses (listens to) many pieces of music and composes music by sampling from the analysis.

Article in IEEE Multimedia - Music Generation with Mixed and Higher Order Markov Models - Cited by 34


I make "music" using an electric guitar, a computer and friends: