Niko's proposal made me rethink how I conceive of effects. Allow me to riff on a mental model focused on subtractive effects like const, nopanic, noalloc, nothreads etc.
Frame
Effects, like lifetimes, could be inferred whole-program; we choose not to. A signature is therefore a contract: by writing const fn, I:
commit (compiler-checked) to never do a runtime-only operation in my function;
which allows you to use my function in const context.
const impl is similar: I commit to a bound on this impl and future changes of it, which you can therefore rely on.