Turns out you want to build higher-level interfaces on top of lower-level interfaces, not the other way around.