# Projects

Below is a sample of some of the projects I’ve made available over the years. For a full list, see my Github profile. Please don’t judge too harshly from some of the older material there.

## Wordstream

A random text generator. Learns a markov chain from a sample corpus and then spits out gibberish via a random walk. Implemented in Haskell. One neat thing about the implementation is that it uses Dependent Types to represent the size (N) of the N-grams used in the representation. This means you can read in the type parameter at runtime, and the program still typechecks!

## Haskell NIST Beacon

The NIST Randomness Beacon is a free API for acquiring blocks of truly random information. The bits are generated through an interesting quantun measurement process. You can learn more about the project here. My project is less awesome: it’s a Haskell interface to the beacon, so you can grab blocks of data to use as seed data for random number generators in your programs!

## Haskell Weather

Yet another Haskell library for interfacing with an API. This time the Weather Underground API. Lets you fetch weather info from you Haskell programs.

## Span

An implementation of `std::span`

in C++17 as described in paper
p0122r7.
Needs to be updated to reflect the final wording voted into C++20.

## Softie

A collection of soft computing primitives for C++. Includes:

- Genetic algorithms
- Fuzzy sets and fuzzy numbers
- An implementation of differential evolution

I expect to add more to this as time permits, though lately it has been quite dormant.

## Units

A C++ meta-library for representing systems of units. It’s good enough to
represent the entirity of SI, except Degrees Celcius (use Kelvin.) The resulting
types you define are to be used with the `quantity`

type, and the unit metadata
is tracked through the various arithmetic operations, all at compile time. There
is zero runtime overhead imposed.

## SLHS

The code portion of my Master’s thesis. SLHS is an implementation of Subjective Logic in Literate Haskell. It uses a special evaluator monad to separate out the construction of complex Subjective Logic expressions from their evaluation on frames of data (similar to expression templates, if you have a C++ background). Subjective Logic is an emergent generalization of probabilistic logic that allows one to represent uncertainty in a simple and concise manner. To my knowledge, SLHS was the first complete (at the time!) realization of Subjective Logic. Alongside the code library, my work included example calculations, as well as correctness and termination proofs for the operators.