I'd stick with the simpler implementation for now and just implement things like `Ord`