diff options
author | Nadrieril | 2019-04-06 13:25:10 +0200 |
---|---|---|
committer | Nadrieril | 2019-04-06 13:25:10 +0200 |
commit | 5176b900bf22cf264ce7e75dd416e9e822719168 (patch) | |
tree | 7901550d7cd111e5e2517e8f02c17fac650441dc /dhall_core/src/text.rs | |
parent | 0cf63216e96331d56e58ba92a35f95ced2fa23ab (diff) |
Upgrade map to traverse
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> { |