summaryrefslogtreecommitdiff
path: root/dhall/src
diff options
context:
space:
mode:
Diffstat (limited to 'dhall/src')
-rw-r--r--dhall/src/lib.rs5
-rw-r--r--dhall/src/syntax/ast/expr.rs13
2 files changed, 18 insertions, 0 deletions
diff --git a/dhall/src/lib.rs b/dhall/src/lib.rs
index 4238b6e..f3a11a1 100644
--- a/dhall/src/lib.rs
+++ b/dhall/src/lib.rs
@@ -99,6 +99,11 @@ impl Parsed {
pub fn to_expr(&self) -> Expr {
self.0.clone()
}
+
+ pub fn substitute_name(self, label: syntax::Label, value: Expr) -> Parsed {
+ let Parsed (expr, import_location) = self;
+ Parsed (expr.substitute_name(label, value), import_location)
+ }
}
impl<'cx> Resolved<'cx> {
diff --git a/dhall/src/syntax/ast/expr.rs b/dhall/src/syntax/ast/expr.rs
index eba2735..bc3ffa4 100644
--- a/dhall/src/syntax/ast/expr.rs
+++ b/dhall/src/syntax/ast/expr.rs
@@ -182,6 +182,19 @@ impl Expr {
let data = binary::encode(self)?;
Ok(crate::utils::sha256_hash(&data))
}
+
+ /// this wraps the expression into an additional let-binding
+ pub fn substitute_name(self, label: Label, value: Expr) -> Expr {
+ Expr::new(
+ ExprKind::Let(
+ label,
+ None,
+ value,
+ self
+ ),
+ Span::Artificial
+ )
+ }
}
// Empty enum to indicate that no error can occur