From d145134fb75635d7ae53630e93cb637536fde024 Mon Sep 17 00:00:00 2001 From: Arun Isaac Date: Tue, 3 Sep 2024 16:56:37 +0100 Subject: workflow: Support merging vectors element-wise. * ravanan/workflow.scm (maybe-vector?): New function. (merge-values): Support merging vectors element-wise. --- ravanan/workflow.scm | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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. -- cgit v1.2.3