What a function is declared to be able to do. Attached to a subtree via
AlephTree::WithEffects. A function whose effect row is [Pure] cannot
call one whose row includes Io, Net, Mut, or Act — that check is
the type/effect checker’s job, not this crate’s; this crate only defines
the vocabulary.
A function’s declared effect row. BTreeSet, not Vec: duplicates are
meaningless here, and — unlike HashSet — iteration order is fixed, so
two structurally-identical effect rows always serialize to identical
bytes (required for deterministic content hashing elsewhere in this crate).