Getting increasingly confused with this type inference system.  May need to rebuild the whole thing into something that makes more sense.