pub struct Env<'e> {
pub known: &'e dyn Fn(&str) -> bool,
pub shadow: &'e dyn Fn(&str) -> Option<String>,
}Expand description
The environment a written name is resolved against — the two questions resolution asks of it, as closures, which is what keeps the kernel out of the surface.
Fields§
§known: &'e dyn Fn(&str) -> boolIs this absolute key declared?
shadow: &'e dyn Fn(&str) -> Option<String>The fresh identity this absolute written name denotes, when a shadow redirects it
(Context::shadow_of).
Implementations§
Source§impl Env<'_>
impl Env<'_>
Sourcepub fn resolve(&self, ns: &Namespaces, written: &Name) -> Resolution
pub fn resolve(&self, ns: &Namespaces, written: &Name) -> Resolution
What written denotes: the absolute key the namespace scope resolves it to, then — unless
it was written with the _root_ escape — the identity a shadow redirects that key to.
★ THE ONE RESOLUTION POINT. Every surface that reads a name reads it here: the term and
command doors through resolve_names_in, the literate door as it reads each name, the
REPL’s Print Axioms, Structure and Quotient references. The shadow is applied AFTER
the scope has chosen an absolute key, and to that key alone, so a shadow never takes part in
the scope’s own decisions (which namespace, which open, whether two readings are
ambiguous), and the escape keeps meaning what it means in Lean: the environment’s own
declaration, whatever shadows its name.
Auto Trait Implementations§
impl<'e> Freeze for Env<'e>
impl<'e> !RefUnwindSafe for Env<'e>
impl<'e> !Send for Env<'e>
impl<'e> !Sync for Env<'e>
impl<'e> Unpin for Env<'e>
impl<'e> UnsafeUnpin for Env<'e>
impl<'e> !UnwindSafe for Env<'e>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.