# Hello there!

I'm Soham Chowdhury, a functional programmer interested in compilers, programming-language theory, and expressive type systems.

I'm also a student of mathematics interested in algebraic and arithmetic geometry and in number theory; a self-taught guitarist (and nearly omnivorous consumer of music); a fan of a lot of good writing; an occasional speedcuber; and an enthusiast for unexplained analogies in and around mathematics, physics, and computer science.

This is my personal site and blog.

## Articles

## Projects

### sound-and-complete

A near-complete implementation of the Sound and Complete type system from Dunfield and Krishnaswami (2016), which describes a minimal ML-like language with GADTs, existential types, and coverage-checked pattern-matching.

### rien

A set of Nix scripts for reproducible, predictable Haskell development environments supporting custom package-sets and native dependencies.

### noether

A numeric programming framework for Haskell featuring highly polymorphic algebraic structures and custom deriving strategies to build complex algebraic behaviors from simpler ones.

## Notes and short proofs of concept

A stripped-down Todo app using the Reflex FRP library, with lots of comments

Type-safe neural networks in Idris, with compiler-checked linear algebra!

The quest to learn Teichmüller theory in honor of Mirzakhani's memory

## Greatest hits from around the web

How I allow multiple monoid, ring, etc. structures in Noether using type families

What are higher-rank polymorphism and bidirectional type inference?

The Langlands program in number theory

Diatonic chord construction 101

The average Haskell user knows much less category theory than you think

Learn extreme pointfree notation, but don't use it

Rewrite rules for high-performance Haskell (with examples from real libraries)

The Servant library, the compiler as a companion, and evaluating your Haskell proficiency

What "prime" means, and Fermat's theorem on sums of two squares

Ideals are better than elements!

No, you're not stupid: math is actually hard

Thunks and laziness in Haskell

Idle thoughts about abstraction in math and pedagogy