A library for automatically concurrent data fetching and request deduplication. It uses a free monad DSL to extract applicative semantics from sequential-looking code.

Probabilistic C#

A monadic probabilistic programming framework for Bayesian modelling and inference in C#.

Sequential Trial Simulator

This application allows the visualisation of the stochastic properties of an arbitrary sequential study, helping investigators design and plan first-in-human trials whilst balancing patient safety and overall cost-effectiveness.

It was initially implemented by our team in three days for Health Hack 2015. But because I wasn’t happy with such a rushed job, I took a few days out to completely reimplement it using React and Redux. It was also an excuse to see undo/redo trivially implemented in the app, which I thought was pretty cool.

The source code is at


A Haskell implementation of Chaum’s dining cryptographers protocol, using Z_p^* Diffie-Hellman, for cryptographically secure anonymous communication. Uses STM to manage concurrency, and the whole thing is structured with the free monad. It currently uses a star-shaped network topology; I’m thinking of using a DHT to make it truly decentralised.


This is an abstraction layer over LanguageExt.Process for declaratively specifying service bus messaging topologies. It was really an excuse to use LanguageExt and see how far you could take the functional style in C#- I actually began writing it in Haskell and then “translating” it to C#.

It only works with LanguageExt.Process, but I found that the Redis persistence was far too slow to be useful over multiple machines. I might break out the declarative messaging topology part and make it work with arbitrary transport layers.


Android library that allows you to automatically crop white borders from images, according to LAB colour space deltas. It includes an extended ImageView that automatically crops images.

I wrote this because I was writing an application that displayed a lot of book cover images, which for some reason seem to always have an ugly white border around them.


A really basic neural network, implemented in Haskell.