Research & projects

There are three major themes that weave through my life and work: architecting, beauty, and communication.


By architecting I mean the process of designing beautiful, coherent visions and following through on the details to make those visions into reality. Architecting is distinct from mere building insofar as it focuses on coherent, elegant design as opposed to just the mechanics of production. I don’t enjoy coding just for coding’s sake but love coding as an outworking of design.


I am highly motivated by beauty in its many forms. I learn new things because they are beautiful; I strive to make all my creative output beautiful; I am motivated to communicate an appreciation for beauty in my teaching. For me, much of beauty in mathematics is to be found in homomorphisms, structure-preserving mappings between different domains.


Architecting and appreciating beauty always happen in the context of community. I love communicating ideas through teaching, writing, and giving talks. Many of the projects and tools I work on are intended to enable the communication of beautiful ideas in beautiful ways (e.g. diagrams and BlogLiterately).

Projects and research interests

Below is a sampling of my current projects and research interests, with each placed in the context of the above themes.

According to the Tolkienesque classification of people explained in Neal Stephenson’s novel Cryptonomicon, I am a dwarf: I like sitting in the dark hammering out Beautiful Things.

Click on any project to see more details.

BlogLiterately-diagrams : Include inline "diagrams" code in blog posts
BlogLiterately : Tool for authoring and uploading blog posts.
diagrams : Vector graphics EDSL.
disco : Teaching language for FP + discrete mathematics
force-layout : Simple force-directed layout
haxr : XML-RPC support.
multiset-comb : Combinatorial algorithms on multisets.
np-extras : Miscellaneous numeric-prelude extensions.
ottparse-pretty : Help deciphering Ott's "ambiguous parse" errors.
species : Combinatorial species.
Data.List.Split : Every method of splitting lists under the sun.
statestack : State-like monad transformer with save/restore.
tau : Tau, the fundamental circle constant.
xmonad : Ultra-configurable tiling window manager.