GNU bug report logs - #73202
[PATCH] Preparation for bootloader rewrite.

Previous Next

Package: guix-patches;

Reported by: Herman Rimm <herman <at> rimm.ee>

Date: Thu, 12 Sep 2024 17:00:02 UTC

Severity: normal

Tags: patch

Fix blocked by 69343: [PATCH 00/12] Simplify bootloader data structures and procedures

Full log


View this message in rfc822 format

From: Herman Rimm <herman <at> rimm.ee>
To: 73202 <at> debbugs.gnu.org
Cc: Christopher Baines <guix <at> cbaines.net>, Josselin Poiret <dev <at> jpoiret.xyz>, Ludovic Courtès <ludo <at> gnu.org>, Mathieu Othacehe <othacehe <at> gnu.org>, Simon Tournier <zimon.toutoune <at> gmail.com>, Tobias Geerinckx-Rice <me <at> tobias.gr>
Subject: [bug#73202] [PATCH v2 06/15] guix: utils: Add flatten and flat-map from haunt.
Date: Fri, 20 Sep 2024 12:37:51 +0200
* guix/utils.scm (flatten, flat-map): Add procedures.

Change-Id: I1d7d49fd02115e3de09ed69bcf5f55a10423162e
---
 guix/utils.scm | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/guix/utils.scm b/guix/utils.scm
index d8ce6ed886..e37c2d8770 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -139,6 +139,9 @@ (define-module (guix utils)
             with-environment-variables
             arguments-from-environment-variable
 
+            flatten
+            flat-map
+
             config-directory
             cache-directory
 
@@ -1027,6 +1030,29 @@ (define (with-atomic-file-output file proc)
         (false-if-exception (delete-file template))
         (close-port out)))))
 
+;; TODO: bring over other utility procedures from (haunt utils).
+(define* (flatten lst #:optional depth)
+  "Return a list that recursively concatenates the sub-lists of LST,
+up to DEPTH levels deep.  When DEPTH is #f, the entire tree is
+flattened."
+  (if (and (number? depth) (zero? depth))
+      lst
+      (fold-right (match-lambda*
+                   (((sub-list ...) memo)
+                    (append (flatten sub-list (and depth (1- depth)))
+                            memo))
+                   ((elem memo)
+                    (cons elem memo)))
+                  '()
+                  lst)))
+
+(define (flat-map proc . lsts)
+  "Apply PROC to each element of each list in LSTS and return a new
+list in which nested lists are concatenated into the result.
+
+For example, the list (1 2 (3)) would be flattened to (1 2 3)."
+  (flatten (apply map proc lsts) 1))
+
 (define* (xdg-directory variable suffix #:key (ensure? #t))
   "Return the name of the XDG directory that matches VARIABLE and SUFFIX,
 after making sure that it exists if ENSURE? is true.  VARIABLE is an
-- 
2.45.2





This bug report was last modified 113 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.