Walter Schulze

awalterschulze @ gmail

I started work at WhatsApp in March 2020. At home I am learning Coq, where I attempt a Phd as a hobby. I have 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 maintain 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. We finished reading The Little Typer and completed some exercises. Now we are moving on to learning how to prove program correctness using Coq. We completed Coq in a Hurry with exercises, we started to prove things about regular expressions and now we are reading CoqArt.

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.

in 2017, 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.


Advertising Coq Why would mathematicians and programmers be interested in the same language?

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 800 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

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: