aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArun Isaac2024-09-03 16:56:37 +0100
committerArun Isaac2024-09-05 16:22:49 +0100
commitd145134fb75635d7ae53630e93cb637536fde024 (patch)
tree40e07236c0504f825f399cfd1e84619f4f0c58af
parentc5dc3ee81dde03448e6029103d598b349dde4d84 (diff)
downloadravanan-d145134fb75635d7ae53630e93cb637536fde024.tar.gz
ravanan-d145134fb75635d7ae53630e93cb637536fde024.tar.lz
ravanan-d145134fb75635d7ae53630e93cb637536fde024.zip
workflow: Support merging vectors element-wise.
* ravanan/workflow.scm (maybe-vector?): New function. (merge-values): Support merging vectors element-wise.
-rw-r--r--ravanan/workflow.scm13
1 files changed, 13 insertions, 0 deletions
diff --git a/ravanan/workflow.scm b/ravanan/workflow.scm
index d0afdde..b531260 100644
--- a/ravanan/workflow.scm
+++ b/ravanan/workflow.scm
@@ -45,6 +45,13 @@
(just (equal? val1 val2)))
#f)))
+(define (maybe-vector? maybe-value)
+ "Return @code{#t} if maybe-monadic @var{maybe-value} contains a vector. Else,
+return @code{#f}."
+ (from-maybe (maybe-let* ((value maybe-value))
+ (just (vector? value)))
+ #f))
+
(define (merge-values maybe-old-value maybe-new-value)
"Merge values @var{maybe-old-value} and @var{maybe-new-value} into a
single value."
@@ -57,6 +64,12 @@ single value."
((and (not (nothing? maybe-old-value))
(nothing? maybe-new-value))
maybe-old-value)
+ ;; If the values are vectors, merge them element-wise.
+ ((and (maybe-vector? maybe-old-value)
+ (maybe-vector? maybe-new-value))
+ (maybe-let* ((old-value maybe-old-value)
+ (new-value maybe-new-value))
+ (just (vector-map merge-values old-value new-value))))
(else
(if (value=? maybe-old-value maybe-new-value)
;; If the values are equal, pick one arbitrarily.