use crate::*; pub trait DslNs<'a, T: 'a>: DslNsWords<'a, T> + DslNsExprs<'a, T> { /// Resolve an expression or symbol. fn from (&'a self, dsl: impl Dsl + 'a) -> Perhaps { if let Ok(Some(literal)) = self.from_literal(&dsl) { Ok(Some(literal)) } else if let Ok(Some(meaning)) = self.from_word(&dsl) { Ok(Some(meaning)) } else { self.from_expr(dsl) } } /// Resolve as literal if valid. fn from_literal (&self, _: impl Dsl) -> Perhaps { Ok(None) } }