summaryrefslogtreecommitdiff
path: root/dhall_core/src/text.rs
diff options
context:
space:
mode:
authorNadrieril2019-04-06 17:12:00 +0200
committerNadrieril2019-04-06 17:12:00 +0200
commit727c5219c9af55df3e61fb372fa2fadecdd15b18 (patch)
treece958565db30077bf3dc1e455ca2e7410f4c2024 /dhall_core/src/text.rs
parent870fa672a7b7c5c872968fd428c6fe77c3e79e4d (diff)
parentbe3f8b2c5327428a0aafbefd024f2a66fb122037 (diff)
Merge branch 'improve_typecheck_code'
Diffstat (limited to 'dhall_core/src/text.rs')
-rw-r--r--dhall_core/src/text.rs22
1 files changed, 16 insertions, 6 deletions
diff --git a/dhall_core/src/text.rs b/dhall_core/src/text.rs
index 9500f32..7c0e2b4 100644
--- a/dhall_core/src/text.rs
+++ b/dhall_core/src/text.rs
@@ -34,18 +34,28 @@ pub enum InterpolatedTextContents<SubExpr> {
}
impl<SubExpr> InterpolatedText<SubExpr> {
- pub fn map<SubExpr2, F>(self, mut f: F) -> InterpolatedText<SubExpr2>
+ pub fn traverse<SubExpr2, E, F>(
+ self,
+ mut f: F,
+ ) -> Result<InterpolatedText<SubExpr2>, E>
where
- F: FnMut(SubExpr) -> SubExpr2,
+ F: FnMut(SubExpr) -> Result<SubExpr2, E>,
{
- InterpolatedText {
+ Ok(InterpolatedText {
head: self.head.clone(),
tail: self
.tail
.into_iter()
- .map(|(e, s)| (f(e), s.clone()))
- .collect(),
- }
+ .map(|(e, s)| Ok((f(e)?, s.clone())))
+ .collect::<Result<_, _>>()?,
+ })
+ }
+
+ pub fn map<SubExpr2, F>(self, mut f: F) -> InterpolatedText<SubExpr2>
+ where
+ F: FnMut(SubExpr) -> SubExpr2,
+ {
+ crate::trivial_result(self.traverse(|e| Ok(f(e))))
}
pub fn as_ref(&self) -> InterpolatedText<&SubExpr> {