summaryrefslogtreecommitdiff
path: root/dhall_core/src/text.rs
diff options
context:
space:
mode:
authorNadrieril2019-04-06 13:25:10 +0200
committerNadrieril2019-04-06 13:25:10 +0200
commit5176b900bf22cf264ce7e75dd416e9e822719168 (patch)
tree7901550d7cd111e5e2517e8f02c17fac650441dc /dhall_core/src/text.rs
parent0cf63216e96331d56e58ba92a35f95ced2fa23ab (diff)
Upgrade map to traverse
Diffstat (limited to '')
-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> {