We ran into a problem where option::get is pure, but if you write foo.get(), it's considered impure, because the iface declaration doesn't mark anything "pure". There's a whole bunch of inconsistencies like this in option. More generally, a really simple form of purity inference would address this without having to do a bunch of tedious work.