Untested, but I feel like this might be a slight optimization.

When weights are put on they are always in descending order, but
when plate orders are chosen, they are always in ascending if tied,
which is the exact opposite of what I want.  I have a feeling
that by putting this reverse in before I run minimumBy, the function
will pick a slightly more preferable plate order when several have
the same scores otherwise.
I forgot to remove this ancient file.
Modifying project so that I can use core types as a library.

I want to make a web frontend in yesod.  I feel like there is still some
stuff I could do to make this a bit better, but this will do for now.
Fixing a cycle bug I think?
Fixing incompatibility with prospective iron-web.
You must now specify proficiency every exercise.  Less confusing.
It now tells you do to what it is actually suggesting, rather than what
you did last time.  This makes more sense when you actually run the
program.