Projects

This is an incomplete list of libraries, tools, and experiments I’ve worked on outside of work. Some are well documented, others are not. Most can be found on my GitHub page.

Newer

  • hs-arm - ARM (dis)assembler and analyzer Haskell library generated from the machine-readable ARMv8.3-A specification.
  • Malice - Haskell framework that provides abstractions and protocol-specific attacks for intercepting and modifying network traffic. It leverages the power of Haskell’s type system to define an embedded DSL for describing the actions of Eve and Mallory. In effect, it allows a person in the middle to write code that is as close to pure evil as possible.
  • pyxendbg - GDB server for virtual machine introspection under Xen. Inspired by xendbg, but with Arm in mind. Designed for debugging paravirtutalized unikernel guests.
  • Isabelle + Nix - The Isabelle developers suggest that trying to repackage, let alone port, Isabelle would be insane: [1] [2]. Nix provides a realistic and satisfying means to such a port. To prove it, I've used Nix to port Isabelle to Arm.
  • regl - Haskell library for applicative-style regular expressions. Features uncommon yet useful primitives such as regular expression complement and disjunction. Based on regular expression derivatives.
  • synthol - Unikernel base layer for Xen based on musl-libc and the HaLVM runtime (abandoned and not documented).

Soon-to-be open source

  • gboot - kexec implemented in pure Go, with some extra flexibility. Designed to boot a type-1 hypervisor such as Xen or Hafnium.

Older

  • chuck-compositions - Some bad music written in the strongly-timed programming language ChucK
  • routor - Tor controller that allows paths to be chosen on a stream-by-stream basis.
  • uttyl - Some useful tty/pty-related hacks.

For wmonad (article about these libraries):

  • xhb-monad - Monad transformer for xhb server connections.
  • xhb-requests - Classes and generated instances for a uniform interface to xhb.
  • xhb-event-queue - Monad transformer over xhb-monad for event handling.
  • xhb-mapping-state - Monad transformer over xhb-monad for keeping track of key, mod, and pointer mappings.

Haskell libraries:

  • bigword - Library for treating bit arrays with statically known size as heterogeneous Church-encoded vectors.
  • bencode - Fast and flexible parsers and builders for BEncoded data.
  • mod-n - Integers under a modulus, using GHC’s type-level naturals.
  • n-vector - Fixed-length unboxed vectors.
  • recall - A typeclass for memoization, based on a paper by Simon Peyton Jones.
  • 24-bit - Word24 and Int24 types, build from GHC.Prim.