Fix up some weirdness by using Rank2Types