Stuff that I actively maintain:
ppad-sha256 and ppad-sha512 are pure Haskell implementations of their respective secure hashing algorithms & HMACs.
ppad-ripemd160 contains an analogous RIPEMD-160 implementation.
ppad-hmac-drbg is a pure Haskell implementation of the HMAC-DRBG CSPRNG.
ppad-secp256k1 is a pure Haskell implementation of BIP340 Schnorr signatures and RFC6979 deterministic ECDSA on secp256k1, and ppad-csecp256k1 contains Haskell FFI bindings to bitcoin-core/secp256k1 (i.e. libsecp256k1).
ppad-bech32 is a Haskell library supporting the bech32m and bech32 checksummed base32 encodings.
ppad-base58 provides encoding/decoding utilities for the base58 & base58check formats.
Stuff that I no longer maintain:
urbit-hob provides Haskell support for dealing with Hoon’s @p and @q auras via a finite-domain Feistel cipher.
urbit-ob is the same, but for JavaScript.
up8-ticket is a simple JavaScript library for securely generating and sharing UP8-compatible, @q-encoded master tickets via e.g. HMAC-DRBG and Shamir’s Secret Sharing.
urbit-key-generation provides a JavaScript implementation of the UP8 hierarchical wallet.
Potentially of wider interest:
Stuff I actively maintain:
declarative is a suite of Markov Chain Monte Carlo (MCMC) libraries for Haskell. In addition to declarative itself, it consists of the following libraries that each export a production-quality transition operator and sampler:
There’s also mcmc-types which provides a bunch of types common to each.
You can create custom Markov chains using arbitrary convex combinations of these transition operators via a simple shallowly-embedded DSL. There’s basic support for annealing of transition operators, as well.
flat-mcmc is a production-quality implementation of a so-called affine invariant ensemble sampler. It is an excellent general-purpose Markov Chain Monte Carlo sampler that requires zero fiddling, while being suitable for many problems.
mwc-probability is a sampling-based probability monad implemented as a simple wrapper over the mwc-random library.
sampling is a Haskell library providing basic functionality for sampling with/without replacement from arbitrary Foldable collections.
Miscellanea potentially of wider interest:
NestedSampling.hs is a Haskell implementation of Skilling’s nested sampling that I co-authored with Brendon Brewer.
hnuts is an implementation of the No U-Turn Sampler (NUTS) in Haskell.
measurable is a simple, shallowly-embedded, illustrative language for working with measures in the form of the Giry monad.
bnp contains some exploratory R work I did around various Bayesian nonparametrics models in 2016.
deanie is a toy embedded probabilistic programming language supporting rejection sampling, importance sampling, and basic Metropolis sampling.
up is a priority search queue (+up) and LRU cache (+lu) for Hoon, complete with a full suite of u3 jets in C, in the spirit of Haskell’s psqueues library.
okasaki contains Haskell implementations of data structures from Chris Okasaki’s Purely Functional Data Structures, typically using recursion schemes and often via continuation-passing style.
Assorted stuff potentially of broader interest:
azimuth-js is a JavaScript library providing Azimuth contract bindings.
azimuth-hs is the same, but for Haskell.
lgram is a simple command-line tool for drilling Latin grammar.
ti3-sampler is a simple little application I hacked together for sampling random locations on a Twilight Imperium board.
drb is a command-line Douay-Rheims.
praxis are various programming exercises I’ve done over the years, mostly taken from Programming Praxis.