summary refs log tree commit diff
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.