## Blog

### Monad confusion and the blurry line between data and computation

On the dual interpretations of data and computation, and a comparison of Clojure macros to Haskell monads.

### Compiling a subset of JavaScript to ARM assembly in Haskell

A toy compiler for a subset of JavaScript to ARM assembly, using Haskell.

### Why learn Racket? A student's perspective

A few thoughts on why I think you should learn Racket.

### About that Reader trick

Reader can be used to track local bindings, but tracking all bindings can be more difficult.

### The good and the bad of Typed Racket

Some thoughts on Typed Racket, gathered from my experience using it to implement a Lox interpreter.

### Crafting Interpreters in Typed Racket

Some thoughts on following Bob Nystrom's book Crafting Interpreters in Typed Racket.

### Solving a few Leetcode questions in Haskell

Exploring some purely functional programming solutions to a few popular Leetcode questions.

### The strange, sketchy emails a browser extension developer receives

Where does extension malware come from? It might originate from emails like these.

### Median heaps in Haskell

An implementation and discussion of a median heap data structure in Haskell.

### Book Review: Racket Programming the Fun Way by James Stelly

A review of the new Racket programming book.

### Implementing simple hash tables in Racket

A simple implementation of mutable hash tables to learn how they work behind the scenes.

### Don't go looking for you first open source contribution

The traditional method of approaching one's first open source contribution gamifies the process and leads an unhelpful experience for all involved.

### Parsing propositional logic in 33 lines of Racket

A guide to implementing a simple parser for propositional logic in Racket.