diff --git a/dsl/src/dsl.rs b/dsl/src/dsl.rs index 3859210..823dc74 100644 --- a/dsl/src/dsl.rs +++ b/dsl/src/dsl.rs @@ -248,21 +248,21 @@ pub trait DslNs<'t, T: 't>: 't { /// Known expressions. const EXPRS: DslExprs<'t, Self, T> = DslNsMap::new(&[]); /// Resolve an expression or symbol. - fn from (&'t self, dsl: &D) -> Perhaps { - if let Ok(Some(literal)) = self.from_literal(dsl) { + fn from (&'t self, dsl: impl Dsl) -> Perhaps { + if let Ok(Some(literal)) = self.from_literal(&dsl) { Ok(Some(literal)) - } else if let Ok(Some(meaning)) = self.from_word(dsl) { + } else if let Ok(Some(meaning)) = self.from_word(&dsl) { Ok(Some(meaning)) } else { - self.from_expr(dsl) + self.from_expr(&dsl) } } /// Resolve as literal if valid. - fn from_literal (&self, _: &D) -> Perhaps { + fn from_literal (&self, _: impl Dsl) -> Perhaps { Ok(None) } /// Resolve a symbol if known. - fn from_word (&'t self, dsl: &D) -> Perhaps { + fn from_word (&'t self, dsl: impl Dsl) -> Perhaps { if let Some(dsl) = dsl.word()? { for (key, get) in Self::WORDS.0.iter() { if dsl == *key { @@ -274,7 +274,7 @@ pub trait DslNs<'t, T: 't>: 't { return Ok(None) } /// Resolve an expression if known. - fn from_expr (&'t self, dsl: &D) -> Perhaps { + fn from_expr (&'t self, dsl: impl Dsl) -> Perhaps { if let Some(expr) = dsl.expr()? { for (key, get) in Self::EXPRS.0.iter() { if Some(*key) == expr.head()? { diff --git a/dsl/src/dsl_macros.rs b/dsl/src/dsl_macros.rs index 36d2c36..f4460f3 100644 --- a/dsl/src/dsl_macros.rs +++ b/dsl/src/dsl_macros.rs @@ -95,7 +95,7 @@ $(dsl_ns!{@word ($state: $State) -> $Type { $pat => $body }}),*]); const EXPRS: DslExprs<'t, $State, $Type> = DslNsMap::new(&[ $(dsl_ns!{@exp ($state: $State) -> $Type { $pat => $body }}),*]); - fn from_literal (&self, dsl: &D) -> Perhaps<$Type> { + fn from_literal (&self, dsl: impl Dsl) -> Perhaps<$Type> { Ok(if let Some(src) = dsl.src()? { Some(to_number(src)? as $Type) } else {