Got the reducer working and tested. Unfortunately, the types are very
messy. This will require some reworking. For example: At the moment we
have to deal in functions over Exp. This means we need a function to
convert to and from the intermediate types. Basically it exposes too
much of the underling setup.