[−][src]Trait canrun::value::ReifyIn
Extract a fully resolved T
from a Val<T>
.
Used by query to ensure that result values are fully and recursively resolved.
Associated Types
type Reified
The "concrete" type that Self
reifies to.
Required methods
fn reify_in(&self, state: &ResolvedState<D>) -> Option<Self::Reified>
Extract a reified Self
from a compatible
ResolvedState
. This trait is usually
used indirectly through the Query
trait.
Examples:
Simple values are typically copied or cloned (since the Val
stores in
an Rc internally).
use canrun::{Val, val, var, ReifyIn, IterResolved, State, ResolvedState}; use canrun::example::{I32, TupleI32}; State::new() .iter_resolved() .for_each(|state: ResolvedState<I32>| { let x = val!(1); assert_eq!(x.reify_in(&state), Some(1)); });
Structures containing additional Val
s should be recursively reified.
State::new() .iter_resolved() .for_each(|state: ResolvedState<TupleI32>| { let x = (val!(1), val!(2)); assert_eq!(x.reify_in(&state), Some((1, 2))); });
Returns None
if the Val
is unresolved.
State::new() .iter_resolved() .for_each(|state: ResolvedState<I32>| { let x: Val<i32> = val!(var()); assert_eq!(x.reify_in(&state), None); });
Also returns None
if Self
is a structure containing any unresolved
Val
s.
State::new() .iter_resolved() .for_each(|state: ResolvedState<TupleI32>| { let x: Val<i32> = val!(var()); let y = (x, val!(2)); assert_eq!(y.reify_in(&state), None); });
Implementations on Foreign Types
impl<'a, D: Domain<'a>> ReifyIn<'a, D> for i8
[src]
impl<'a, D: Domain<'a>> ReifyIn<'a, D> for i16
[src]
impl<'a, D: Domain<'a>> ReifyIn<'a, D> for i32
[src]
impl<'a, D: Domain<'a>> ReifyIn<'a, D> for i64
[src]
impl<'a, D: Domain<'a>> ReifyIn<'a, D> for u8
[src]
impl<'a, D: Domain<'a>> ReifyIn<'a, D> for u16
[src]
impl<'a, D: Domain<'a>> ReifyIn<'a, D> for u32
[src]
impl<'a, D: Domain<'a>> ReifyIn<'a, D> for u64
[src]
impl<'a, D: Domain<'a>> ReifyIn<'a, D> for isize
[src]
impl<'a, D: Domain<'a>> ReifyIn<'a, D> for usize
[src]
impl<'a, D: Domain<'a>> ReifyIn<'a, D> for f32
[src]
impl<'a, D: Domain<'a>> ReifyIn<'a, D> for f64
[src]
impl<'a, D: Domain<'a>> ReifyIn<'a, D> for String
[src]
impl<'a, D: Domain<'a>> ReifyIn<'a, D> for &'static str
[src]
impl<'a, D: Domain<'a>> ReifyIn<'a, D> for bool
[src]
impl<'a, D: Domain<'a>> ReifyIn<'a, D> for char
[src]
impl<'a, D: 'a, Av: ReifyIn<'a, D, Reified = Ar>, Ar, Bv: ReifyIn<'a, D, Reified = Br>, Br> ReifyIn<'a, D> for (Av, Bv)
[src]
type Reified = (Av::Reified, Bv::Reified)
fn reify_in(&self, state: &ResolvedState<D>) -> Option<Self::Reified>
[src]
impl<'a, D: 'a, Av: ReifyIn<'a, D, Reified = Ar>, Ar, Bv: ReifyIn<'a, D, Reified = Br>, Br, Cv: ReifyIn<'a, D, Reified = Cr>, Cr> ReifyIn<'a, D> for (Av, Bv, Cv)
[src]
type Reified = (Av::Reified, Bv::Reified, Cv::Reified)
fn reify_in(&self, state: &ResolvedState<D>) -> Option<Self::Reified>
[src]
impl<'a, D: 'a, Av: ReifyIn<'a, D, Reified = Ar>, Ar, Bv: ReifyIn<'a, D, Reified = Br>, Br, Cv: ReifyIn<'a, D, Reified = Cr>, Cr, Dv: ReifyIn<'a, D, Reified = Dr>, Dr> ReifyIn<'a, D> for (Av, Bv, Cv, Dv)
[src]
type Reified = (Av::Reified, Bv::Reified, Cv::Reified, Dv::Reified)
fn reify_in(&self, state: &ResolvedState<D>) -> Option<Self::Reified>
[src]
impl<'a, D: 'a, Av: ReifyIn<'a, D, Reified = Ar>, Ar, Bv: ReifyIn<'a, D, Reified = Br>, Br, Cv: ReifyIn<'a, D, Reified = Cr>, Cr, Dv: ReifyIn<'a, D, Reified = Dr>, Dr, Ev: ReifyIn<'a, D, Reified = Er>, Er> ReifyIn<'a, D> for (Av, Bv, Cv, Dv, Ev)
[src]
type Reified = (Av::Reified, Bv::Reified, Cv::Reified, Dv::Reified, Ev::Reified)
fn reify_in(&self, state: &ResolvedState<D>) -> Option<Self::Reified>
[src]
impl<'a, '_, T, D> ReifyIn<'a, D> for &'_ T where
T: ReifyIn<'a, D>,
D: Domain<'a> + 'a,
[src]
Loading content...
T: ReifyIn<'a, D>,
D: Domain<'a> + 'a,
Implementors
impl<'a, D, Kv: Eq + Hash + Debug, Kr, Vv: Debug, Vr> ReifyIn<'a, D> for LMap<Kv, Vv> where
D: DomainType<'a, Kv> + DomainType<'a, Vv> + 'a,
Kv: ReifyIn<'a, D, Reified = Kr>,
Kr: Eq + Hash,
Vv: ReifyIn<'a, D, Reified = Vr>,
[src]
D: DomainType<'a, Kv> + DomainType<'a, Vv> + 'a,
Kv: ReifyIn<'a, D, Reified = Kr>,
Kr: Eq + Hash,
Vv: ReifyIn<'a, D, Reified = Vr>,
type Reified = HashMap<Kr, Vr>
fn reify_in(&self, state: &ResolvedState<D>) -> Option<Self::Reified>
[src]
impl<'a, D, T> ReifyIn<'a, D> for LVec<T> where
T: ReifyIn<'a, D> + Debug,
D: DomainType<'a, T> + 'a,
[src]
T: ReifyIn<'a, D> + Debug,
D: DomainType<'a, T> + 'a,
type Reified = Vec<T::Reified>
fn reify_in(&self, state: &ResolvedState<D>) -> Option<Self::Reified>
[src]
impl<'a, T, D> ReifyIn<'a, D> for Val<T> where
T: ReifyIn<'a, D> + Debug,
D: DomainType<'a, T> + 'a,
[src]
T: ReifyIn<'a, D> + Debug,
D: DomainType<'a, T> + 'a,
impl<'a, T, D> ReifyIn<'a, D> for LVar<T> where
T: ReifyIn<'a, D> + Debug,
D: DomainType<'a, T> + 'a,
[src]
T: ReifyIn<'a, D> + Debug,
D: DomainType<'a, T> + 'a,