The Functional Programmer
- 2026-09-20· 8 min
Functional Programming in Python
Immutable data with dataclasses, sum types via match, itertools/functools pipelines, and where the approach actually breaks down.
- 2026-09-19· 8 min
Typeclasses in Depth
MINIMAL pragmas, superclasses, multi-param classes and fundeps, overlapping/incoherent instances, orphans, and constraint kinds.
- 2026-09-18· 8 min
Implementing SAT in OCaml Part 5
A hand-written C stub binding to Z3, run against the same difference-logic benchmarks as the from-scratch solver, and where it falls over.
- ocamlpro.com2026-09-14
A tour of the OCaml Workshop 2026
- anil.recoil.org2026-09-13
.plan-26-37: The humans aren't dead, the humans are ahead
- 2026-09-13· 6 min
Tail Calls
Which languages guarantee them, which only sometimes deliver them, how to check, and what to do when you do not have them.
- 2026-09-12· 6 min
Introduction to Yojson
Safe vs Basic, the Yojson.Safe.t variants, manual construction and traversal, Util helpers, streaming, and ppx_deriving_yojson.
- anil.recoil.org2026-09-11
Hitting a NERVE with attacks on AI-powered brain-computer interfaces
- 2026-09-11· 6 min
Implementing SAT in OCaml Part 4
A real linear-arithmetic fragment: difference logic atoms x - y <= k, decided by Bellman-Ford negative-cycle detection with explanations.
- anil.recoil.org2026-09-09
Open MPhil/Part II student projects for 2026-2027
- ocsigen.org2026-09-08
TyXML 5.0.0: the HTML living standard and SVG 2
- anil.recoil.org2026-09-06
.plan-26-36: Ground control to major MODIS
- 2026-09-06· 6 min
Introduction to Lean
A command-first tour of Lean 4: elan and lake, the goal state, the tactics worth knowing, and a proof by induction end to end.
- 2026-09-05· 7 min
Introduction to Irmin
A Git-like distributed database in OCaml: stores, contents, branches, merges, custom types, watches, and the in-memory/FS/Git backends.
- 2026-09-04· 6 min
Implementing SAT in OCaml Part 3
From SAT to SMT: the DPLL(T) architecture, reusing conflict-driven learning for theory conflicts, and a union-find equality theory.
- anil.recoil.org2026-08-31
Security scanning my own code with Scrutineer and local coding models
- anil.recoil.org2026-08-30
.plan-26-35: All I want for Tesseramas is (GP)U
- 2026-08-30· 6 min
Profiling GHC Programs
A command-first tour of the GHC profiler: +RTS -s, cost centres, heap profiles, info-table profiling, and the eventlog.
- anil.recoil.org2026-08-28
The 3rd Programming for the Planet 2026 videos are available
- 2026-08-28· 6 min
Implementing SAT in OCaml Part 2
From backtracking to CDCL: a trail, decision levels, first-UIP conflict analysis, clause learning, and non-chronological backjumping.
- anil.recoil.org2026-08-27
Celebrating a year of Tessera embeddings and releasing GeoTessera 0.10
- anil.recoil.org2026-08-23
.plan-26-34: Am I human or am I antibotty
- 2026-08-23· 6 min
Introduction to odoc
A command-first tour of OCaml documentation: doc comments, markup, cross-references, .mld pages, and publishing the result.
- anil.recoil.org2026-08-22
Just a rumour of a bug is enough to find a security exploit these days
- 2026-08-21· 7 min
Implementing SAT in OCaml Part 1
CNF, unit propagation, a full recursive DPLL solver, pure literal elimination, a DIMACS parser, and a command-line driver.
- anil.recoil.org2026-08-16
Using Forester to turn Foundations of CS into interactive evergreen lectures
- anil.recoil.org2026-08-16
.plan-26-33: Zarro rides out and evidence papers pour in
- 2026-08-16· 6 min
Functional Programming in C++
Sum types, monadic optional and expected, lazy range pipelines, folds, composition, and persistent structures, in C++23.
- anil.recoil.org2026-08-13
Improving local weather forecasts using Tessera embeddings
- anil.recoil.org2026-08-09
.plan-26-32: Finally a use for serverless and found the Forester for the trees
- 2026-08-09· 5 min
Deriving Strategies in Haskell
A code-first tour of stock, newtype, anyclass, and via: what each one generates, and which to reach for.
- anil.recoil.org2026-08-08
Updating to the OxCaml 5.2.0-minus39 opam packaging
- anil.recoil.org2026-08-05
GetMOBILE article on benchmarking micro-NPUs now out
- anil.recoil.org2026-08-02
.plan-26-31: Sorting out Tessera and Evidence TAP infrastructure
- 2026-08-02· 7 min
Parsing with Menhir
A command-first tour of the OCaml parser generator: grammars, dune wiring, conflicts, parameterized rules, positions, and error messages.
- anil.recoil.org2026-07-26
.plan-26-30: Bananas ripen, models open, and OxCaml releases
- 2026-07-26· 2 min
Dockerizing OCaml Binaries
A command-first tour of packaging an OCaml binary into a small, reproducible image: multi-stage builds, musl/Alpine, and scratch.
- anil.recoil.org2026-07-19
.plan-26-29: Perfect weather, imperfectly measured, precisely predicted
- 2026-07-19· 6 min
Introduction to opam
A command-first tour of the OCaml package manager: switches, packages, pinning, dependencies, and publishing.
- anil.recoil.org2026-07-12
.plan-26-28: What fun papers piled up while I was out at sea
- 2026-07-12· 3 min
Effect Handlers in OCaml
A command-first tour of OCaml 5 effects: perform, handlers, generators, and where domains and eio fit in.
- anil.recoil.org2026-07-05
.plan-26-27: Somewhere over the icecap
- 2026-07-05· 3 min
Introduction to Dune
A command-first tour of the OCaml build system: history, libraries, opam, flags, flambda.
- ocsigen.org2026-07-01
Why Ocsigen decided not to switch from Lwt to Eio (for now)
- anil.recoil.org2026-06-28
.plan-26-26: Gelato, geospatial, and players of games
- 2026-06-28· 10 min
GADTs in OCaml
Making illegal states unrepresentable: typed expression evaluators, refined pattern matching, existentials, and a typed printf from scratch.
- anil.recoil.org2026-06-24
A scorching CNG London during Climate Action Week
- ocsigen.org2026-06-23
Ocsipersist 2.1.0: type-safe persistence with Deriving
- anil.recoil.org2026-06-21
.plan-26-25: Planetary scale plans, Windows file-descriptor scale problems
- 2026-06-21· 7 min
ppx in Practice
From ppxlib boilerplate to a working [%where] extension: AST traversal, deriver registration, error nodes, and reading generated code.
- ocsigen.org2026-06-19
Ocsigen in 2026: what we're working on
- anil.recoil.org2026-06-18
Sir David Attenborough joins us to celebrate the Cambridge Conservation Initiative
- anil.recoil.org2026-06-16
The Royal Society Environmental Prize lecture on feeding the world without costing the earth
- anil.recoil.org2026-06-14
Language integrated LLMs as an OCaml function
- anil.recoil.org2026-06-14
.plan-26-24: Apparently a professor now; still debugging io_uring at midnight
- ocsigen.org2026-06-14
A new home for the Ocsigen blog
- 2026-06-14· 9 min
Introduction to Alcotest
Test suites, expect tests and dune promote, cram tests, QCheck, code coverage with bisect_ppx, and CI, all in commands.
- anil.recoil.org2026-06-12
Tessera v1.1 released, with smoother and temporally stable embeddings
- anil.recoil.org2026-06-07
.plan-26-23: Earth Embeddings, Emails Everywhere, and ERRNOOOs
- ocsigen.org2026-06-07
Documenting OCaml projects with wodoc
- 2026-06-07· 11 min
C Interop in OCaml
The C FFI end to end in commands: raw stubs and the GC invariants, ctypes and foreign, callbacks, bigarrays, and profiling the boundary.
- anil.recoil.org2026-06-06
Tessera at CVPR 2026, and the front page of the European Space Agency!
- anil.recoil.org2026-06-06
Self-hosting email the hard way from your own routable IPv4 block up
- anil.recoil.org2026-05-31
.plan-26-22: From digital rewilding in Edinburgh to uring and Tessera hackery
- 2026-05-31· 11 min
lens in Haskell
Building a lens from first principles, then the real library: Lens, Prism, Traversal, Iso, Fold, indexed optics, and generic derivation.
- anil.recoil.org2026-05-30
Rewilding the Web: my workshop report from Edinburgh
- anil.recoil.org2026-05-24
.plan-26-21: Pint of Science, OxCaml dissertations, and TESSERA 1.1 stirring
- 2026-05-24· 9 min
async in Haskell
Structured concurrency over bare forkIO: async/wait, race, concurrently, exception propagation, timeouts, and pools.
- anil.recoil.org2026-05-22
What happens when a hedgehog story prickles its way into the BBC
- anil.recoil.org2026-05-17
Building OxCaml packages for Debian, Fedora, Homebrew and Arch
- anil.recoil.org2026-05-17
.plan-26-20: Putting OxCaml in a box and OCaml in orbit (again)
- anil.recoil.org2026-05-14
Voluntary AI disclosure proposal for OCaml: update 1
- anil.recoil.org2026-05-10
.plan-26-19: Ancient oaks, parliamentary evidence, and TESSERA in the City
- 2026-05-04· 14 min
Building a CAS in OCaml Part 5
Calculus: a derivative table, Laurent series, limits read off a valuation, and symbolic integration of every rational function, with an honest refusal for everything else.
- anil.recoil.org2026-05-03
.plan-26-18: From tropical forest protection to oi swallowing its oxcaml tail
- anil.recoil.org2026-04-30
Helping tropical forest protection keep up with a fast-changing world
- 2026-04-27· 25 min
Building a CAS in OCaml Part 4
Factorization over Z by way of a finite field: Cantor-Zassenhaus, Berlekamp, Hensel lifting and subset recombination, then rational functions and partial fractions on top.
- anil.recoil.org2026-04-26
.plan-26-17: Unwedging kernels, dogfood deployments, and managing beef leakage
- anil.recoil.org2026-04-21
AI, science and the UK–EU relationship at the Royal Society
- 2026-04-20· 31 min
Building a CAS in OCaml Part 3
Sparse multivariate polynomials, pseudo-division, the subresultant PRS against a modular GCD that is a thousand times faster, resultants, and a parser to drive it all.
- anil.recoil.org2026-04-19
.plan-26-16: Chennai, Cambridge, Belfast: a week on the wing
- anil.recoil.org2026-04-13
The FP Launchpad takes off at IIT Madras
- 2026-04-13· 10 min
Building a CAS in OCaml Part 2
Exact rationals over the bignums, an n-ary expression tree, and the automatic simplifier that turns it into a canonical form.
- anil.recoil.org2026-04-12
.plan-26-15: Banyan trees, (anti)botnets and Bose-Einstein bases
- anil.recoil.org2026-04-08
The Internet needs an antibotty immune system, stat
- 2026-04-06· 13 min
Building a CAS in OCaml Part 1
Arbitrary-precision integers from scratch: base-2^30 limbs, schoolbook and Karatsuba multiplication, Knuth algorithm D division, and decimal conversion.