diff options
author | Nadrieril | 2019-04-06 17:12:00 +0200 |
---|---|---|
committer | Nadrieril | 2019-04-06 17:12:00 +0200 |
commit | 727c5219c9af55df3e61fb372fa2fadecdd15b18 (patch) | |
tree | ce958565db30077bf3dc1e455ca2e7410f4c2024 /dhall_core/src/text.rs | |
parent | 870fa672a7b7c5c872968fd428c6fe77c3e79e4d (diff) | |
parent | be3f8b2c5327428a0aafbefd024f2a66fb122037 (diff) |
Merge branch 'improve_typecheck_code'
Diffstat (limited to '')
-rw-r--r-- | dhall_core/src/text.rs | 22 |
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> { |