Chris Martin

I blog mostly about programming.

Julie and I run Type Classes, which is good site to visit if you're interested in Haskell (and Haskell is a good thing to be interested in if you're a programmer).

Social links: Twitter · GitHub · Hackage · Stack Overflow · Email

Formerly: Blockchain engineer at Hijro, CTO of Fold, developer at GTRI.


Hard reality

There's got to be more to life than touching grass.


Nix version pinning


Not so hard after all

Problems with products, part 2

Higher-kinded products

Problems with products, part one

Posing a difficulty with composition

Drying rod

A simple winter clothes drying solution

The value of packaging

How publishing packages makes programming tractable

A thread

Thoughts about where the writing should go

Garden thinking

How to control your dogs

In the computer

The files are in the computer. It's so simple.

The forever skillet

or: How I Learned To Stop Using Dish Soap and Love the Iron

Commit history

Keep it how you like.

Why paper

The burden of things.

The app-concepts diamond

An observation about a typical application's dependency graph.

Maybe death

Under a totalitarian regime, one avoids being partial.

What goes in $PATH?

A quick overview of the purpose of the PATH variable.

White elephant

Places where levity does not fit.

More than linked lists

Linked lists are prevalent in functional programming, but they don't take the place of other kinds of lists.

Line wrap

How I prefer to design compositionally, and why I dislike TDD.

Java interfaces map to Haskell records

A toy example showing a Java-to-Haskell translation in which an interface in Java is rewritten as a record in Haskell.

Elephant variable reassignment

An example using the (.=) operator from microlens-mtl to write Haskell code that resembles reassignment of mutable variables.

Loc, Span, and Area

A Haskell library for calculations on text file positions.

Null as a sort of bottom

When bottoms are tagged, we may view bottom more inclusively. This could reasonably include null.

What is a leak?

“Leak” is one of those technical words we often forget to explain.

Some Applicative Functors

Everybody’s favorite applicatives, and their semigroups.

Introduction to Nix (for users of Stack)

What Nix is for, and how it can help you as a Haskell developer.

Water Monoids

Solving that water-puddles problem, using as many monoids as possible.

Submitting a pull request to GHC

Contributing to Haskell isn’t scary - How to submit a PR to GHC using Phabricator.

NixOS on DigitalOcean

How to start a new NixOS droplet on Digital Ocean using nixos-infect.

Installing the Nix package manager

A minimal guide to getting started with the Nix package manager on any Linux or OSX machine.

Installing NixOS

I just installed NixOS on my laptop. This is a summary of my experience.

Intro Scala pitfalls

There are a handful of mistakes that most people (who aren’t coming from a Haskell background) tend to fall into.

“Dynamic typing”

“Dynamic typing,” the belief that you can’t explain to a computer why your code works, but you can keep track of it all in your head.

Gradle Scala REPL

I recently switched a Scala project’s build from SBT to Gradle and was disappointed to find that Gradle has no support for launching the Scala REPL. My workaround: …


The most terse operator in any language is adjacency, or in other words, no operator at all.

Unwanted Haskell triangle

Sometimes I see a Java question, write myself a Haskell solution, then sadly read over the thread of people who will never know about it.

such commit—wow
alias such=git
alias very=git
alias wow='git status'

Georgia Tech course history

2005 — 2013

Where do the little libraries belong?

Why are we at the mercy of languages’ core libraries?

// Let’s talk about programs.
type P

Pencil effects

Side effects are great, but …

Bunny vine

This project for CS 6491 (computer graphics) uses Scala with JOGL to generate a tree over approximately half of the faces of a triangle manifold using a laced ring construction, and then render an animation resembling a vine that grows upward along paths defined by the tree.

Javac bug report

I have been cursing at Java a lot lately. Over this past week, it’s because I’ve been experiencing inexplicable compilation failures.

Randomization pipeline

Random selection from a stream in constant space.

A Mathematician’s Lament

The big question everyone had in middle-to-high school mathematics classes was “When am I ever going to use this?”

Last-minute math

As I was leaving for AVS this morning, I happened upon a take-home test for Graph Theory which I should have done this weekend …

Kernel, vectors, graphs

It occurred to me that this OS Design course has put me past a certain point of no return in life.

Smalltalk, go away

I like what I wrote for my 2340 survey comment. So I’m sharing it.

Fun with find

find is one of many simple yet powerful command-line tools, and I haven’t until recently had a chance to learn how to use it. Oh, the things you can do.

The Great Macropod Exodus

The agéd Prophet hunched begrudgingly over his walking pole, peering out at distant Tasman Sea. …