void CommuteRoot(IFn fn) { object newRoot = fn.invoke(_root); Validate(getValidator(), newRoot); object oldRoot = _root; _root = newRoot; ++_rev; NotifyWatches(oldRoot, newRoot); }