use crate::{
core::{AnyVal, Unify, Value, VarId},
resolve_any, Reify,
};
#[derive(Clone)]
pub struct ReadyState {
pub(crate) values: im_rc::HashMap<VarId, AnyVal>,
}
impl ReadyState {
pub(crate) fn new(values: im_rc::HashMap<VarId, AnyVal>) -> Self {
ReadyState { values }
}
pub fn resolve<T: Unify>(&self, val: &Value<T>) -> Value<T> {
resolve_any(&self.values, &val.to_anyval())
.to_value()
.expect("AnyVal resolved to unexpected Value<T>")
}
pub fn reify<T, R>(&self, value: &T) -> Option<R>
where
T: Reify<Reified = R>,
{
value.reify_in(self)
}
}