/// notify every table that contains the pointer. Symbol-table content caches compare against this
/// 3. Changing the declaration pointed to by the declaration pointer does not change the id. This
RwLockReadGuard::try_map(self.inner.representations.read(), |reprs| reprs.get::<T>()).ok()
/// This is used in comprehensions to refer to a quantified variable that is already defined using a generator.
/// let declaration = DeclarationPtr::new_find(Name::User("a".into()),Domain::int(vec![Range::Bounded(1,5)]));
/// assert!(declaration.domain().is_some_and(|x| x.as_ground().unwrap() == &GroundDomain::Int(vec![Range::Bounded(1,5)], None)))
/// let declaration = DeclarationPtr::new_find(Name::User("a".into()),Domain::int(vec![Range::Bounded(1,5)]));
/// let declaration = DeclarationPtr::new_find(Name::User("a".into()),Domain::int(vec![Range::Bounded(1,5)]));
pub fn as_enumerated_type(&self) -> Option<MappedRwLockReadGuard<'_, Moo<EnumeratedType>>> {
/// let mut declaration = DeclarationPtr::new_find(Name::User("a".into()),Domain::int(vec![Range::Bounded(1,5)]));
/// let declaration = DeclarationPtr::new_find(Name::User("a".into()),Domain::int(vec![Range::Bounded(1,5)]));
fn map<U>(&self, f: impl FnOnce(&Declaration) -> &U) -> MappedRwLockReadGuard<'_, U> {
/// Applies mutable function `f` to the declaration, returning the result as a mutable reference.
/// Hashes this declaration's value into `state`, guarding against declaration-reference cycles.
| DeclarationKind::FindAuxiliary(decision_variable) => decision_variable.category_of(),
/// A short-lived value binding used internally during rewrites (e.g. comprehension unrolling).
/// Unlike `ValueLetting`, this is not intended to represent a user-visible top-level `letting`.