GNU logs - #76413, boring messages


Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#76413: [PATCH] New macro 'compf' for composing functions
Resent-From: Eshel Yaron <me@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 19 Feb 2025 13:53:02 +0000
Resent-Message-ID: <handler.76413.B.173997314622526 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: report 76413
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: patch
To: 76413 <at> debbugs.gnu.org
X-Debbugs-Original-To: bug-gnu-emacs@HIDDEN
Received: via spool by submit <at> debbugs.gnu.org id=B.173997314622526
          (code B ref -1); Wed, 19 Feb 2025 13:53:02 +0000
Received: (at submit) by debbugs.gnu.org; 19 Feb 2025 13:52:26 +0000
Received: from localhost ([127.0.0.1]:45252 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tkkV0-0005rA-34
	for submit <at> debbugs.gnu.org; Wed, 19 Feb 2025 08:52:26 -0500
Received: from lists.gnu.org ([2001:470:142::17]:42322)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <me@HIDDEN>) id 1tkkUy-0005qJ-CC
 for submit <at> debbugs.gnu.org; Wed, 19 Feb 2025 08:52:25 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <me@HIDDEN>) id 1tkkUr-00086b-OA
 for bug-gnu-emacs@HIDDEN; Wed, 19 Feb 2025 08:52:17 -0500
Received: from mail.eshelyaron.com ([107.175.124.16] helo=eshelyaron.com)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <me@HIDDEN>) id 1tkkUq-0005Xc-3G
 for bug-gnu-emacs@HIDDEN; Wed, 19 Feb 2025 08:52:17 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eshelyaron.com;
 s=mail; t=1739973133;
 bh=Bddv+nKprXumeRaTOoaW2Ej4CyN5qEObkQdBEHQpBsY=;
 h=From:To:Subject:Date:From;
 b=p1JB2P3g/stUSCHi4COIh2Z6U/F8+tioiBhFdOYBzPn+t4yJldO3uR4PAAL8me/lP
 lRizDp4kc7UofIVqQmfmrzpAXN8TJIqceo2sXMM69nt2dywON20DOq7NgEbfZ2qCEZ
 Th8gnPlWVMtgp0sSfkjI4VbcwShOf9f4300s3/GcAXhvShp44YG8gVYQZ6AG0uwxQ2
 77pgW9muYyR7mVlVKH+jdDaI6DgcS6eo2+4xl5EsaGmf2Wm870yZSq4YPtlvzSZb9t
 g7YWBXnGL0hc2+JLv0fk+yy6cRmHRZl3epnjjzvGDTDwKENDA0HFzTPzvQXdSuCJ4G
 wV44TKt2P/1rQ==
From: Eshel Yaron <me@HIDDEN>
Date: Wed, 19 Feb 2025 14:52:11 +0100
Message-ID: <m17c5mkpo4.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
Received-SPF: pass client-ip=107.175.124.16; envelope-from=me@HIDDEN;
 helo=eshelyaron.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 0.9 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.1 (/)

--=-=-=
Content-Type: text/plain

Tags: patch

This patch adds a new macro 'compf' that streamlines the common pattern
of function composition.

Namely, instead of (lambda (x) (foo (bar (baz x)))), with this macro we
can write (compf foo bar baz), which expands to exactly the same form.

This is similar in essence to the "compose" function proposed in
https://lists.gnu.org/archive/html/emacs-devel/2021-02/msg01138.html
with the main difference that compf is a macro, not a function, so it
incurs no runtime performance penalty.

There are many occurrences of function composition in the Emacs code
base alone that can be simplified with this macro.  For example:

- In lisp/calc/calc-mode.el:
  (lambda (v) (symbol-value (car v)))       => (compf symbol-value car)
- In lisp/dired-aux.el:
  (lambda (dir) (not (file-remote-p dir)))  => (compf not file-remote-p)
- In lisp/env.el:
  (lambda (var) (getenv (upcase var)))      => (compf getenv upcase)
- In lisp/mail/smtpmail.el:
  (lambda (s) (intern (downcase s)))        => (compf intern downcase)
- In lisp/net/tramp-container.el:
  (lambda (line) (car (split-string line))) => (compf car split-line)
- ...


Best,

Eshel



--=-=-=
Content-Type: text/patch
Content-Disposition: attachment;
 filename=0001-New-macro-compf-for-composing-functions.patch

From fffadc1a6cb04b925d136859db66e4b706563651 Mon Sep 17 00:00:00 2001
From: Eshel Yaron <me@HIDDEN>
Date: Wed, 19 Feb 2025 12:58:40 +0100
Subject: [PATCH] New macro 'compf' for composing functions

* lisp/subr.el (compf): New macro.
---
 lisp/subr.el | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/lisp/subr.el b/lisp/subr.el
index e9b49ae5376..a76dad8ea82 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -7678,4 +7678,37 @@ internal--c-header-file-path
                   base
                 (append base (list (expand-file-name arch "/usr/include"))))))))))
 
+(defmacro compf (&rest funs)
+  "Expand to the function composition of FUNS, outermost function first.
+
+For example, (compf car cdr) expands to (lambda (x) (car (cdr x))),
+which does the same as `cadr'.
+
+FUNS may contain symbols which refer to functions, such as `car' and
+`cdr' in the example above, and it can also contain `lambda' functions
+and other forms which evaluate to function values.  To refer to a local
+variable VAR that is bound to a function, wrap VAR in a vector, as in:
+
+  (let ((foo (lambda (...) ...)
+    (compf ignore [foo] always))
+
+If FUNS is empty, expand to `identity'."
+  (cond
+   ((null funs) '#'identity)
+   ((length= funs 1)
+    (let ((fun (car funs)))
+      (cond
+       ((symbolp fun) `#',fun)          ; Function name.
+       ((vectorp fun) (aref fun 0))     ; Local variable reference.
+       (t fun))))                       ; `lambda' and other forms.
+   (t
+    (let ((arg 'x))
+      (dolist (fun (reverse funs))
+        (setq arg
+              (cond
+               ((symbolp fun) `(,fun ,arg))
+               ((vectorp fun) `(funcall ,(aref fun 0) ,arg))
+               (t `(funcall ,fun ,arg)))))
+      `(lambda (x) ,arg)))))
+
 ;;; subr.el ends here
-- 
2.46.2


--=-=-=--




Message sent:


Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Mailer: MIME-tools 5.505 (Entity 5.505)
Content-Type: text/plain; charset=utf-8
X-Loop: help-debbugs@HIDDEN
From: help-debbugs@HIDDEN (GNU bug Tracking System)
To: Eshel Yaron <me@HIDDEN>
Subject: bug#76413: Acknowledgement ([PATCH] New macro 'compf' for
 composing functions)
Message-ID: <handler.76413.B.173997314622526.ack <at> debbugs.gnu.org>
References: <m17c5mkpo4.fsf@HIDDEN>
X-Gnu-PR-Message: ack 76413
X-Gnu-PR-Package: emacs
X-Gnu-PR-Keywords: patch
Reply-To: 76413 <at> debbugs.gnu.org
Date: Wed, 19 Feb 2025 13:53:02 +0000

Thank you for filing a new bug report with debbugs.gnu.org.

This is an automatically generated reply to let you know your message
has been received.

Your message is being forwarded to the package maintainers and other
interested parties for their attention; they will reply in due course.

Your message has been sent to the package maintainer(s):
 bug-gnu-emacs@HIDDEN

If you wish to submit further information on this problem, please
send it to 76413 <at> debbugs.gnu.org.

Please do not send mail to help-debbugs@HIDDEN unless you wish
to report a problem with the Bug-tracking system.

--=20
76413: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D76413
GNU Bug Tracking System
Contact help-debbugs@HIDDEN with problems


Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#76413: [PATCH] New macro 'compf' for composing functions
Resent-From: Michael Albinus <michael.albinus@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 19 Feb 2025 14:35:02 +0000
Resent-Message-ID: <handler.76413.B76413.17399756939183 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 76413
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: patch
To: 76413 <at> debbugs.gnu.org
Cc: me@HIDDEN
X-Debbugs-Original-To: Eshel Yaron via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
X-Debbugs-Original-Cc: Eshel Yaron <me@HIDDEN>, 76413 <at> debbugs.gnu.org
Received: via spool by 76413-submit <at> debbugs.gnu.org id=B76413.17399756939183
          (code B ref 76413); Wed, 19 Feb 2025 14:35:02 +0000
Received: (at 76413) by debbugs.gnu.org; 19 Feb 2025 14:34:53 +0000
Received: from localhost ([127.0.0.1]:45742 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tklA4-0002Nz-OB
	for submit <at> debbugs.gnu.org; Wed, 19 Feb 2025 09:34:53 -0500
Received: from mout.gmx.net ([212.227.15.15]:56603)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <michael.albinus@HIDDEN>)
 id 1tklA1-0002NA-Jt
 for 76413 <at> debbugs.gnu.org; Wed, 19 Feb 2025 09:34:50 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de;
 s=s31663417; t=1739975681; x=1740580481; i=michael.albinus@HIDDEN;
 bh=y7fh/qigsTl3YXq+v7uB/OQbwtUCHwmJ/LGQ/gE5fAk=;
 h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date:
 Message-ID:MIME-Version:Content-Type:cc:content-transfer-encoding:
 content-type:date:from:message-id:mime-version:reply-to:subject:
 to;
 b=NfXahEzah3auyqNvWGDdgJGRe7UUue3oz1rpoVSyQ9eu/5nmUNJyom/yZJM6fIxq
 /HX6ELB2nJaJ/SWY2Zy/XC1vK9yTBlkb6P8eGu+jenzAHDpwso9rva3/eiBwewsCC
 niH7QD8codYtYZHobNdFBI4wyeGVYdn+TGSjoyHdVpTGEJMgnRX9SksbwNRHsdXlM
 JwNrYjG8QljTB+YpBG+nIl+vnmw44zCS1Iw/5PCXLzmnjmnNqrgJKj/BXRxUHJwEE
 Mr+zbJZKJUPirvKzMJv1XHDipkGzHYJKi18/gI4UpD0KuyEcZQNPoERPN0/AyMcML
 fF7GPFao0YVXVp3ECg==
X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a
Received: from gandalf.gmx.de ([185.89.38.155]) by mail.gmx.net (mrgmx005
 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MOREi-1tzXxf0ED0-00In9X; Wed, 19
 Feb 2025 15:34:41 +0100
From: Michael Albinus <michael.albinus@HIDDEN>
In-Reply-To: <m17c5mkpo4.fsf@HIDDEN>
References: <m17c5mkpo4.fsf@HIDDEN>
Date: Wed, 19 Feb 2025 15:34:40 +0100
Message-ID: <87mseic8an.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-Provags-ID: V03:K1:SB/jg2vI/M+FLHTA/uiEQtggT0ilVYswi/7ElrFl/W4RcN9Ygm8
 PjpOZVdDSOtxEvfzuAim1/CGls81zmE99WRvK6UBfJH86R+i8ZLUQFeGTulPzpqsoqqPzSD
 ILn52TCwEtrFXhakVZVE8ec0aPpHmqOwWOEojHnqtjiPHKfq++JyHm/UlDjQaVcPdmhMqgu
 FzmERBtRkbFeV3COc6A0g==
X-Spam-Flag: NO
UI-OutboundReport: notjunk:1;M01:P0:nmDLnp20MWI=;9yBEtNMZ05RT7dWLwZOHqrna3RP
 DIYtRghl5ADXV09K59LHT381r8oQaYZqZL9WiQoELd9VlghzV2MtmUWNu61bxtVDYrc7+Honq
 hO/TjbxKyr/RNokEV/7eqTeyVN1EtJ4nOjVOZ892ilzNyiBkAy/V5+3uqGp6c6pmOxq5MWzyj
 N5wRlFxfbqlP1fwxebbgMpNOiVBAvuockQCt5woSfhOVetABqUD167Ak1nNhQX+No4xB9mdNu
 4fJLIgBtrVqipJjTDopiOb7sVH7BgChl5Z0F9hIpFipNntJ8bRLSzSK6sZxSBXJOUfSk+c8V+
 JVMbW84KeBACUids9tPMqmSnEmQ32v1NRxVYMZU8ws3LDZq09UtX3TecGZeYZY78XBe7B1v5r
 E/rRwVoF334iTlunOknUOuanF+jxUOxxhuX+Y9p9I3swwxKmCpo9hBR5vYHvdt1P4o3w92yjo
 sJgelLDsNLvxjaUQXdP9NK4cWM80bi4TdMRThen3JHgbY8TW0Mj7XC0vOKiFH7yGE6DOZmxLq
 8cu7vK3QHHsqneMehWPtM6ygj8+of4ALWtK1YtNRC3nYcUF9zDvetSsgF0tpyUrmCLMISriDn
 yEMl8nesdsBfqmsR/W11uiIhI+8RRc8RATeODG8dzr4XTssjbSVhAAuxya4TC83E/i1YGV6N2
 ngZ3xfgnuBfILFHu9Ty60db0p/nHNUtNP7KvAoZsEPshlgzFhGgihMybejJjqc70Z1mMPRMxG
 cZQNuFCl5P3F61YuRMcUdxUuwIhSFvQfzZ5biIsnBm5EvgPoFgDu1YQRgUBgJGV7Q/+JGNy9h
 SVj+CgQkveDurbEPzdP5yRClSk8HDw30jvFbVFsmNuBBQbNtP1+Br6Vdpdnqf2qxXnU3zW03H
 rUSCAjXMOho+3gvVe/bmanOKDEGiBJIUPJNihn+t2AAAFPzsyYH3brIYp22JkwuQVjJHrGYi2
 Ju9ad3+ONc/kNalnAt/ON6j9g5Rjsh6hPrjBPwZFnQ+1zLtTZA2kTWSuI5atX9XYO2qQNxFhB
 aeFFzo3A/Wmr+dMq0abCAfK2NQ6hZPSyT8lvcsoWhLGOn6qgMZ8KwKBUP5XSZEROP7dJrrZXN
 3KoUjjTeaKp1yaq8RpsVrMTWTN4b5n3x/QnpzuYbBmREOYKBSV82Gp/AnrAS5zH006gpbEIhk
 RtF4jBkHnPj2hBqQurbJ7d37Lu7JBKIYHcEQDWSFjPcT+p0atXCE8nUb7QAz1knZICBgZ2soe
 +mwllea1NxTFbv0tcWephYisKpJACc3qDs5OhkxpVpcfVf7a4FNuDZBfGYqy2FElMEprY3xPv
 JZGjiHB1XajVzFdvmvO+3+r0HMN9Voy9fLoDbeVX/kEPdtvMFFNo93+ttdw2mz4fVDnX3LCis
 TxgqSSWzMpT60Gb/yEcMXXd/1EGWsBSgGc3ri3ywBybI2aJEuvKzA4KVr1
X-Spam-Score: -0.7 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

Eshel Yaron via "Bug reports for GNU Emacs, the Swiss army knife of text
editors" <bug-gnu-emacs@HIDDEN> writes:

Hi Eshel,

> This patch adds a new macro 'compf' that streamlines the common pattern
> of function composition.

I have no opinion about this change. However,

> - In lisp/net/tramp-container.el:
>   (lambda (line) (car (split-string line))) => (compf car split-line)

Pls don't touch Tramp. It is backwards compatible down to Emacs 28.

> Best,
>
> Eshel

Best regards, Michael.




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#76413: [PATCH] New macro 'compf' for composing functions
Resent-From: Michael Albinus <michael.albinus@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 19 Feb 2025 14:36:02 +0000
Resent-Message-ID: <handler.76413.B.17399757099436 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 76413
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: patch
To: 76413 <at> debbugs.gnu.org
Cc: me@HIDDEN
X-Debbugs-Original-To: Eshel Yaron via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
X-Debbugs-Original-Cc: Eshel Yaron <me@HIDDEN>, 76413 <at> debbugs.gnu.org
Received: via spool by submit <at> debbugs.gnu.org id=B.17399757099436
          (code B ref -1); Wed, 19 Feb 2025 14:36:02 +0000
Received: (at submit) by debbugs.gnu.org; 19 Feb 2025 14:35:09 +0000
Received: from localhost ([127.0.0.1]:45748 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tklAK-0002Rf-DC
	for submit <at> debbugs.gnu.org; Wed, 19 Feb 2025 09:35:09 -0500
Received: from lists.gnu.org ([2001:470:142::17]:55212)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <michael.albinus@HIDDEN>)
 id 1tklAH-0002OO-RR
 for submit <at> debbugs.gnu.org; Wed, 19 Feb 2025 09:35:07 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <michael.albinus@HIDDEN>)
 id 1tklA6-0008Kw-A5
 for bug-gnu-emacs@HIDDEN; Wed, 19 Feb 2025 09:34:54 -0500
Received: from mout.gmx.net ([212.227.15.15])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <michael.albinus@HIDDEN>)
 id 1tklA4-0003r9-Eo
 for bug-gnu-emacs@HIDDEN; Wed, 19 Feb 2025 09:34:54 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de;
 s=s31663417; t=1739975681; x=1740580481; i=michael.albinus@HIDDEN;
 bh=y7fh/qigsTl3YXq+v7uB/OQbwtUCHwmJ/LGQ/gE5fAk=;
 h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date:
 Message-ID:MIME-Version:Content-Type:cc:content-transfer-encoding:
 content-type:date:from:message-id:mime-version:reply-to:subject:
 to;
 b=NfXahEzah3auyqNvWGDdgJGRe7UUue3oz1rpoVSyQ9eu/5nmUNJyom/yZJM6fIxq
 /HX6ELB2nJaJ/SWY2Zy/XC1vK9yTBlkb6P8eGu+jenzAHDpwso9rva3/eiBwewsCC
 niH7QD8codYtYZHobNdFBI4wyeGVYdn+TGSjoyHdVpTGEJMgnRX9SksbwNRHsdXlM
 JwNrYjG8QljTB+YpBG+nIl+vnmw44zCS1Iw/5PCXLzmnjmnNqrgJKj/BXRxUHJwEE
 Mr+zbJZKJUPirvKzMJv1XHDipkGzHYJKi18/gI4UpD0KuyEcZQNPoERPN0/AyMcML
 fF7GPFao0YVXVp3ECg==
X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a
Received: from gandalf.gmx.de ([185.89.38.155]) by mail.gmx.net (mrgmx005
 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MOREi-1tzXxf0ED0-00In9X; Wed, 19
 Feb 2025 15:34:41 +0100
From: Michael Albinus <michael.albinus@HIDDEN>
In-Reply-To: <m17c5mkpo4.fsf@HIDDEN>
References: <m17c5mkpo4.fsf@HIDDEN>
Date: Wed, 19 Feb 2025 15:34:40 +0100
Message-ID: <87mseic8an.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-Provags-ID: V03:K1:SB/jg2vI/M+FLHTA/uiEQtggT0ilVYswi/7ElrFl/W4RcN9Ygm8
 PjpOZVdDSOtxEvfzuAim1/CGls81zmE99WRvK6UBfJH86R+i8ZLUQFeGTulPzpqsoqqPzSD
 ILn52TCwEtrFXhakVZVE8ec0aPpHmqOwWOEojHnqtjiPHKfq++JyHm/UlDjQaVcPdmhMqgu
 FzmERBtRkbFeV3COc6A0g==
X-Spam-Flag: NO
UI-OutboundReport: notjunk:1;M01:P0:nmDLnp20MWI=;9yBEtNMZ05RT7dWLwZOHqrna3RP
 DIYtRghl5ADXV09K59LHT381r8oQaYZqZL9WiQoELd9VlghzV2MtmUWNu61bxtVDYrc7+Honq
 hO/TjbxKyr/RNokEV/7eqTeyVN1EtJ4nOjVOZ892ilzNyiBkAy/V5+3uqGp6c6pmOxq5MWzyj
 N5wRlFxfbqlP1fwxebbgMpNOiVBAvuockQCt5woSfhOVetABqUD167Ak1nNhQX+No4xB9mdNu
 4fJLIgBtrVqipJjTDopiOb7sVH7BgChl5Z0F9hIpFipNntJ8bRLSzSK6sZxSBXJOUfSk+c8V+
 JVMbW84KeBACUids9tPMqmSnEmQ32v1NRxVYMZU8ws3LDZq09UtX3TecGZeYZY78XBe7B1v5r
 E/rRwVoF334iTlunOknUOuanF+jxUOxxhuX+Y9p9I3swwxKmCpo9hBR5vYHvdt1P4o3w92yjo
 sJgelLDsNLvxjaUQXdP9NK4cWM80bi4TdMRThen3JHgbY8TW0Mj7XC0vOKiFH7yGE6DOZmxLq
 8cu7vK3QHHsqneMehWPtM6ygj8+of4ALWtK1YtNRC3nYcUF9zDvetSsgF0tpyUrmCLMISriDn
 yEMl8nesdsBfqmsR/W11uiIhI+8RRc8RATeODG8dzr4XTssjbSVhAAuxya4TC83E/i1YGV6N2
 ngZ3xfgnuBfILFHu9Ty60db0p/nHNUtNP7KvAoZsEPshlgzFhGgihMybejJjqc70Z1mMPRMxG
 cZQNuFCl5P3F61YuRMcUdxUuwIhSFvQfzZ5biIsnBm5EvgPoFgDu1YQRgUBgJGV7Q/+JGNy9h
 SVj+CgQkveDurbEPzdP5yRClSk8HDw30jvFbVFsmNuBBQbNtP1+Br6Vdpdnqf2qxXnU3zW03H
 rUSCAjXMOho+3gvVe/bmanOKDEGiBJIUPJNihn+t2AAAFPzsyYH3brIYp22JkwuQVjJHrGYi2
 Ju9ad3+ONc/kNalnAt/ON6j9g5Rjsh6hPrjBPwZFnQ+1zLtTZA2kTWSuI5atX9XYO2qQNxFhB
 aeFFzo3A/Wmr+dMq0abCAfK2NQ6hZPSyT8lvcsoWhLGOn6qgMZ8KwKBUP5XSZEROP7dJrrZXN
 3KoUjjTeaKp1yaq8RpsVrMTWTN4b5n3x/QnpzuYbBmREOYKBSV82Gp/AnrAS5zH006gpbEIhk
 RtF4jBkHnPj2hBqQurbJ7d37Lu7JBKIYHcEQDWSFjPcT+p0atXCE8nUb7QAz1knZICBgZ2soe
 +mwllea1NxTFbv0tcWephYisKpJACc3qDs5OhkxpVpcfVf7a4FNuDZBfGYqy2FElMEprY3xPv
 JZGjiHB1XajVzFdvmvO+3+r0HMN9Voy9fLoDbeVX/kEPdtvMFFNo93+ttdw2mz4fVDnX3LCis
 TxgqSSWzMpT60Gb/yEcMXXd/1EGWsBSgGc3ri3ywBybI2aJEuvKzA4KVr1
Received-SPF: pass client-ip=212.227.15.15;
 envelope-from=michael.albinus@HIDDEN; helo=mout.gmx.net
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Eshel Yaron via "Bug reports for GNU Emacs, the Swiss army knife of text
editors" <bug-gnu-emacs@HIDDEN> writes:

Hi Eshel,

> This patch adds a new macro 'compf' that streamlines the common pattern
> of function composition.

I have no opinion about this change. However,

> - In lisp/net/tramp-container.el:
>   (lambda (line) (car (split-string line))) => (compf car split-line)

Pls don't touch Tramp. It is backwards compatible down to Emacs 28.

> Best,
>
> Eshel

Best regards, Michael.




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#76413: [PATCH] New macro 'compf' for composing functions
Resent-From: Eshel Yaron <me@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 19 Feb 2025 15:11:02 +0000
Resent-Message-ID: <handler.76413.B.173997782627849 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 76413
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: patch
To: Michael Albinus <michael.albinus@HIDDEN>
Cc: 76413 <at> debbugs.gnu.org
X-Debbugs-Original-Cc: "Eshel Yaron via Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>, 76413 <at> debbugs.gnu.org
Received: via spool by submit <at> debbugs.gnu.org id=B.173997782627849
          (code B ref -1); Wed, 19 Feb 2025 15:11:02 +0000
Received: (at submit) by debbugs.gnu.org; 19 Feb 2025 15:10:26 +0000
Received: from localhost ([127.0.0.1]:48920 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tkliT-0007F3-Dz
	for submit <at> debbugs.gnu.org; Wed, 19 Feb 2025 10:10:26 -0500
Received: from lists.gnu.org ([2001:470:142::17]:37690)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <me@HIDDEN>) id 1tkliQ-0007Bb-AR
 for submit <at> debbugs.gnu.org; Wed, 19 Feb 2025 10:10:23 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <me@HIDDEN>) id 1tkliH-00032x-Qz
 for bug-gnu-emacs@HIDDEN; Wed, 19 Feb 2025 10:10:14 -0500
Received: from mail.eshelyaron.com ([107.175.124.16] helo=eshelyaron.com)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <me@HIDDEN>) id 1tkliF-0003es-Ss
 for bug-gnu-emacs@HIDDEN; Wed, 19 Feb 2025 10:10:13 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eshelyaron.com;
 s=mail; t=1739977810;
 bh=S9fZhPj0TcSdxhEbgaCE2LlTrA1nCJtKsLnz9/w6KUQ=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=kWKStosD8ytKk+SSarHxyOfj8V51zPXqHUACK7itXn35IRQcGMfRc4foUoyjeHaOn
 r8SABBtHENwzNd50Wlq3n1CTje0groyAMO28ibvEEXHKGaMvOyd4ezHA7R8tipAE6n
 zttd2QlZM0wJuLuE4eBwFotGr8BRyxRiSM2E+n0nksmNso8KKrghcl215rR870QMsb
 WGwRiPD78km55JOWAOQ9TCm0hJ+JYuv93wGovtwx5kirAO7yJOFZ6/g7Q/uCKm6WDg
 T7b0DawcKfpS/kZIGHxbjRSBOz73w0xcpW+7lV85mo973mXK8pgdyia0ie5vQpBCLl
 WqCOYpkEZplFg==
From: Eshel Yaron <me@HIDDEN>
In-Reply-To: <87mseic8an.fsf@HIDDEN>
References: <m17c5mkpo4.fsf@HIDDEN> <87mseic8an.fsf@HIDDEN>
Date: Wed, 19 Feb 2025 16:10:08 +0100
Message-ID: <m134gakm27.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
Received-SPF: pass client-ip=107.175.124.16; envelope-from=me@HIDDEN;
 helo=eshelyaron.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 0.9 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.1 (/)

--=-=-=
Content-Type: text/plain

Hi Michael,

Michael Albinus <michael.albinus@HIDDEN> writes:

> Eshel Yaron via "Bug reports for GNU Emacs, the Swiss army knife of text
> editors" <bug-gnu-emacs@HIDDEN> writes:
>
> Hi Eshel,
>
>> This patch adds a new macro 'compf' that streamlines the common pattern
>> of function composition.
>
> I have no opinion about this change. However,
>
>> - In lisp/net/tramp-container.el:
>>   (lambda (line) (car (split-string line))) => (compf car split-line)
>
> Pls don't touch Tramp. It is backwards compatible down to Emacs 28.

Noted.  To be clear, I'm not proposing to change any existing code at
this point, only to add the new macro.

Anyway, here's an updated patch, which improves the macro's hygiene and
fixes a typo in the docstring:


--=-=-=
Content-Type: text/x-patch
Content-Disposition: inline;
 filename=v2-0001-New-macro-compf-for-composing-functions.patch

From e2834b162f3f1fa1c8dc8e057e3aa00950269d8e Mon Sep 17 00:00:00 2001
From: Eshel Yaron <me@HIDDEN>
Date: Wed, 19 Feb 2025 12:58:40 +0100
Subject: [PATCH v2] New macro 'compf' for composing functions

* lisp/subr.el (compf): New macro.  (Bug#76413)
---
 lisp/subr.el | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/lisp/subr.el b/lisp/subr.el
index e9b49ae5376..d1615c9083f 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -7678,4 +7678,37 @@ internal--c-header-file-path
                   base
                 (append base (list (expand-file-name arch "/usr/include"))))))))))
 
+(defmacro compf (&rest funs)
+  "Expand to the function composition of FUNS, outermost function first.
+
+For example, (compf car cdr) expands to (lambda (x) (car (cdr x))),
+which does the same as `cadr'.
+
+FUNS may contain symbols which refer to functions, such as `car' and
+`cdr' in the example above, and it can also contain `lambda' functions
+and other forms which evaluate to function values.  To refer to a local
+variable VAR that is bound to a function, wrap VAR in a vector, as in:
+
+  (let ((foo (lambda (...) ...)))
+    (compf ignore [foo] always))
+
+If FUNS is empty, expand to `identity'."
+  (cond
+   ((null funs) '#'identity)
+   ((length= funs 1)
+    (let ((fun (car funs)))
+      (cond
+       ((symbolp fun) `#',fun)          ; Function name.
+       ((vectorp fun) (aref fun 0))     ; Local variable reference.
+       (t fun))))                       ; `lambda' and other forms.
+   (t
+    (let* ((x (gensym "x")) (arg x))
+      (dolist (fun (reverse funs))
+        (setq arg
+              (cond
+               ((symbolp fun) `(,fun ,arg))
+               ((vectorp fun) `(funcall ,(aref fun 0) ,arg))
+               (t `(funcall ,fun ,arg)))))
+      `(lambda (,x) ,arg)))))
+
 ;;; subr.el ends here
-- 
2.46.2


--=-=-=--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#76413: [PATCH] New macro 'compf' for composing functions
Resent-From: Eshel Yaron <me@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 19 Feb 2025 15:11:03 +0000
Resent-Message-ID: <handler.76413.B76413.173997781627633 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 76413
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: patch
To: Michael Albinus <michael.albinus@HIDDEN>
Cc: 76413 <at> debbugs.gnu.org
X-Debbugs-Original-Cc: "Eshel Yaron via Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>, 76413 <at> debbugs.gnu.org
Received: via spool by 76413-submit <at> debbugs.gnu.org id=B76413.173997781627633
          (code B ref 76413); Wed, 19 Feb 2025 15:11:03 +0000
Received: (at 76413) by debbugs.gnu.org; 19 Feb 2025 15:10:16 +0000
Received: from localhost ([127.0.0.1]:48912 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tkliJ-0007Ak-Dv
	for submit <at> debbugs.gnu.org; Wed, 19 Feb 2025 10:10:16 -0500
Received: from mail.eshelyaron.com ([107.175.124.16]:40752 helo=eshelyaron.com)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <me@HIDDEN>) id 1tkliF-00077x-CA
 for 76413 <at> debbugs.gnu.org; Wed, 19 Feb 2025 10:10:12 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eshelyaron.com;
 s=mail; t=1739977810;
 bh=S9fZhPj0TcSdxhEbgaCE2LlTrA1nCJtKsLnz9/w6KUQ=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=kWKStosD8ytKk+SSarHxyOfj8V51zPXqHUACK7itXn35IRQcGMfRc4foUoyjeHaOn
 r8SABBtHENwzNd50Wlq3n1CTje0groyAMO28ibvEEXHKGaMvOyd4ezHA7R8tipAE6n
 zttd2QlZM0wJuLuE4eBwFotGr8BRyxRiSM2E+n0nksmNso8KKrghcl215rR870QMsb
 WGwRiPD78km55JOWAOQ9TCm0hJ+JYuv93wGovtwx5kirAO7yJOFZ6/g7Q/uCKm6WDg
 T7b0DawcKfpS/kZIGHxbjRSBOz73w0xcpW+7lV85mo973mXK8pgdyia0ie5vQpBCLl
 WqCOYpkEZplFg==
From: Eshel Yaron <me@HIDDEN>
In-Reply-To: <87mseic8an.fsf@HIDDEN>
References: <m17c5mkpo4.fsf@HIDDEN> <87mseic8an.fsf@HIDDEN>
Date: Wed, 19 Feb 2025 16:10:08 +0100
Message-ID: <m134gakm27.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Spam-Score: 0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--=-=-=
Content-Type: text/plain

Hi Michael,

Michael Albinus <michael.albinus@HIDDEN> writes:

> Eshel Yaron via "Bug reports for GNU Emacs, the Swiss army knife of text
> editors" <bug-gnu-emacs@HIDDEN> writes:
>
> Hi Eshel,
>
>> This patch adds a new macro 'compf' that streamlines the common pattern
>> of function composition.
>
> I have no opinion about this change. However,
>
>> - In lisp/net/tramp-container.el:
>>   (lambda (line) (car (split-string line))) => (compf car split-line)
>
> Pls don't touch Tramp. It is backwards compatible down to Emacs 28.

Noted.  To be clear, I'm not proposing to change any existing code at
this point, only to add the new macro.

Anyway, here's an updated patch, which improves the macro's hygiene and
fixes a typo in the docstring:


--=-=-=
Content-Type: text/x-patch
Content-Disposition: inline;
 filename=v2-0001-New-macro-compf-for-composing-functions.patch

From e2834b162f3f1fa1c8dc8e057e3aa00950269d8e Mon Sep 17 00:00:00 2001
From: Eshel Yaron <me@HIDDEN>
Date: Wed, 19 Feb 2025 12:58:40 +0100
Subject: [PATCH v2] New macro 'compf' for composing functions

* lisp/subr.el (compf): New macro.  (Bug#76413)
---
 lisp/subr.el | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/lisp/subr.el b/lisp/subr.el
index e9b49ae5376..d1615c9083f 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -7678,4 +7678,37 @@ internal--c-header-file-path
                   base
                 (append base (list (expand-file-name arch "/usr/include"))))))))))
 
+(defmacro compf (&rest funs)
+  "Expand to the function composition of FUNS, outermost function first.
+
+For example, (compf car cdr) expands to (lambda (x) (car (cdr x))),
+which does the same as `cadr'.
+
+FUNS may contain symbols which refer to functions, such as `car' and
+`cdr' in the example above, and it can also contain `lambda' functions
+and other forms which evaluate to function values.  To refer to a local
+variable VAR that is bound to a function, wrap VAR in a vector, as in:
+
+  (let ((foo (lambda (...) ...)))
+    (compf ignore [foo] always))
+
+If FUNS is empty, expand to `identity'."
+  (cond
+   ((null funs) '#'identity)
+   ((length= funs 1)
+    (let ((fun (car funs)))
+      (cond
+       ((symbolp fun) `#',fun)          ; Function name.
+       ((vectorp fun) (aref fun 0))     ; Local variable reference.
+       (t fun))))                       ; `lambda' and other forms.
+   (t
+    (let* ((x (gensym "x")) (arg x))
+      (dolist (fun (reverse funs))
+        (setq arg
+              (cond
+               ((symbolp fun) `(,fun ,arg))
+               ((vectorp fun) `(funcall ,(aref fun 0) ,arg))
+               (t `(funcall ,fun ,arg)))))
+      `(lambda (,x) ,arg)))))
+
 ;;; subr.el ends here
-- 
2.46.2


--=-=-=--




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#76413: [PATCH] New macro 'compf' for composing functions
Resent-From: "Basil L. Contovounesios" <basil@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 19 Feb 2025 17:14:01 +0000
Resent-Message-ID: <handler.76413.B76413.173998520118751 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 76413
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: patch
To: Eshel Yaron <me@HIDDEN>
Cc: Michael Albinus <michael.albinus@HIDDEN>, 76413 <at> debbugs.gnu.org
Received: via spool by 76413-submit <at> debbugs.gnu.org id=B76413.173998520118751
          (code B ref 76413); Wed, 19 Feb 2025 17:14:01 +0000
Received: (at 76413) by debbugs.gnu.org; 19 Feb 2025 17:13:21 +0000
Received: from localhost ([127.0.0.1]:50472 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tkndQ-0004sM-Gl
	for submit <at> debbugs.gnu.org; Wed, 19 Feb 2025 12:13:21 -0500
Received: from mta-13-4.privateemail.com ([198.54.127.109]:35869)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <basil@HIDDEN>)
 id 1tkndN-0004rU-Rq
 for 76413 <at> debbugs.gnu.org; Wed, 19 Feb 2025 12:13:18 -0500
Received: from mta-13.privateemail.com (localhost [127.0.0.1])
 by mta-13.privateemail.com (Postfix) with ESMTP id 4Yyjdd20xhz3hhVZ;
 Wed, 19 Feb 2025 12:13:09 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=contovou.net;
 s=default; t=1739985189;
 bh=u6tNctaN8O/p2a7MiayMJglJSZ/nI8dmPHOlA8kO2Po=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=ieaCrEyGoWvigLVP/7lknsLDP7Igxjcrew/LmjSxzZSTSN+xtaq55Ig2QrVxUUE/Y
 OIborSc9cpFnx5aBpciHXeOibv6If11b9lthcVtRry4EKXkuYQUx66XE/9x7zNrRvz
 zj/XiE0ksyWsl0PGKYb0CjQmlvqHBLZKD340iCJ3zeSqXiYeTGfhZDvVLwycemerpA
 wcWrnFVGfcZJ0BXqMViim7btK56Gw86gZuLRKVSg/lkDsieGwo0+BrUV056H+KYYXW
 reyXFqycil3AgPcXVPfeCa13oQrxm/OQIxdw81RdLb/ew9oxWo2DNxBFmjtTSJe15P
 Vq9j+sGujI/Mg==
Received: from localhost (unknown [79.127.182.166])
 by mta-13.privateemail.com (Postfix) with ESMTPA;
 Wed, 19 Feb 2025 12:13:06 -0500 (EST)
From: "Basil L. Contovounesios" <basil@HIDDEN>
In-Reply-To: <m134gakm27.fsf@HIDDEN>
References: <m17c5mkpo4.fsf@HIDDEN> <87mseic8an.fsf@HIDDEN>
 <m134gakm27.fsf@HIDDEN>
Date: Wed, 19 Feb 2025 18:13:03 +0100
Message-ID: <87v7t5j1sw.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Virus-Scanned: ClamAV using ClamSMTP
X-Spam-Score: 0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Eshel Yaron [2025-02-19 16:10 +0100] wrote:

> From e2834b162f3f1fa1c8dc8e057e3aa00950269d8e Mon Sep 17 00:00:00 2001
> From: Eshel Yaron <me@HIDDEN>
> Date: Wed, 19 Feb 2025 12:58:40 +0100
> Subject: [PATCH v2] New macro 'compf' for composing functions

Nice.

> +FUNS may contain symbols which refer to functions, such as `car' and
> +`cdr' in the example above, and it can also contain `lambda' functions
> +and other forms which evaluate to function values.

A (declare (debug ...)) property would be nice, particularly for
stepping through the latter types of argument.

>  To refer to a local
> +variable VAR that is bound to a function, wrap VAR in a vector, as in:
> +
> +  (let ((foo (lambda (...) ...)))
> +    (compf ignore [foo] always))

Is there precedent for this [syntax] somewhere?

I understand that function symbols may be needed more frequently than
variable symbols in arguments to compf, but did you consider
distinguishing between the two kinds of symbol by #'-quoting function
symbols, and leaving variables unquoted?
AFAIK this has more precedents in Elisp.

> +    (let* ((x (gensym "x")) (arg x))
> +      (dolist (fun (reverse funs))
> +        (setq arg
> +              (cond
> +               ((symbolp fun) `(,fun ,arg))
> +               ((vectorp fun) `(funcall ,(aref fun 0) ,arg))
> +               (t `(funcall ,fun ,arg)))))
> +      `(lambda (,x) ,arg)))))

I wonder if we could/should be smart=E2=84=A2 about the func-arity of the
rightmost function and adapt the wrapper lambda's arglist accordingly.

Finally, would you like to write an announcement and some tests as well?

Thanks,
--=20
Basil




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#76413: [PATCH] New macro 'compf' for composing functions
Resent-From: Stefan Kangas <stefankangas@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 19 Feb 2025 18:37:02 +0000
Resent-Message-ID: <handler.76413.B76413.173999019823133 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 76413
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: patch
To: Eshel Yaron <me@HIDDEN>, 76413 <at> debbugs.gnu.org
Cc: Stefan Monnier <monnier@HIDDEN>
Received: via spool by 76413-submit <at> debbugs.gnu.org id=B76413.173999019823133
          (code B ref 76413); Wed, 19 Feb 2025 18:37:02 +0000
Received: (at 76413) by debbugs.gnu.org; 19 Feb 2025 18:36:38 +0000
Received: from localhost ([127.0.0.1]:51417 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tkow1-000612-Mt
	for submit <at> debbugs.gnu.org; Wed, 19 Feb 2025 13:36:38 -0500
Received: from mail-ed1-x536.google.com ([2a00:1450:4864:20::536]:44262)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <stefankangas@HIDDEN>)
 id 1tkovy-00060T-SS
 for 76413 <at> debbugs.gnu.org; Wed, 19 Feb 2025 13:36:35 -0500
Received: by mail-ed1-x536.google.com with SMTP id
 4fb4d7f45d1cf-5e095d47a25so93784a12.0
 for <76413 <at> debbugs.gnu.org>; Wed, 19 Feb 2025 10:36:34 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1739990188; x=1740594988; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=wnC3bQkXqlBdCBXZrnmkVeKA+dezL0cMq8CldQCIq+k=;
 b=ZWBggp60UFmKKSdo0maf83w9aRb+22D1CezovG3JFpyPU1Fn8b7hNfyHCwtLmX5/6Q
 aOgTaFm13oDMbZk4pdakwSeDOAAPYCi1UgGxaMTeEKTbzQHp62fxv+5X0mnLLWdFFzsK
 qkmQe+y2l11mg50VxA4YJAyTblvP9RO6iZ/rWbJln0Ru0ZKABGV8b9NMOWzdz03DB50p
 O3bASJBYvSbwUC2WI7/9cc3Kpvq5uOk6R3jvxSFkhG6/qrFQxLlDzfWHDx830z3PCUub
 qcEdQAiHawTDsHdrkAiyZyDlXXAvLwmfWhaKvbWoJG+uMbwlztVuQr7q8GMzjP2JCjAL
 8cIg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1739990188; x=1740594988;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=wnC3bQkXqlBdCBXZrnmkVeKA+dezL0cMq8CldQCIq+k=;
 b=UmFHnrhsR/jyBIGhW1C3/U6jfWC57O5uV9QtYf8qWPqa51e1erdhPDWrPATO0piFvK
 E+tWKYst8VFJVh84maat8masAlfBA4C1jvpVCe9C/hpaC0CynPC3aix5E3je5ZaMsqEM
 KG30aFXvKjz5iF8IBW9On28i9/u72sc0HsgAqgoLGgH14ijPYKuuRZ/oqSlu1361k7k3
 FeWXHoiJFzTfDbwvAuxg6zg7fI0/vTOFHrYcbLY2Yu/xYSk74nhol0bqXWD8VZ7vMVUT
 MPBr6ALundKtxZAQpZvfWLw0IFCUb3X8eNQ6k9rQndaUjrMXiis8sNFKl3j+TqYGfTqh
 +VNQ==
X-Forwarded-Encrypted: i=1;
 AJvYcCXO7G2PmAcgaBqEDLGLR8j5mS/bh9iu/7gqbLkIYieGGIYDAZHh3Fsd7sIVD7hEPh7KgN/dyg==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YxXUKWjmv9urXEfmllmKwa3ZtMdKlCVjpv3ooqqSPUxXx2nwKrR
 Ixr48LMeDOPI2XzNhDRfCs6ILv/wUytySAlWn1rf49QyCYrUTdd5z/mlIuku9Hiv0X9A9wNg6uO
 tCcsHebmKaSXt8oyRDkuyl9D+/Nw=
X-Gm-Gg: ASbGnctdwk1XQDJKP02tCCOgldo+3XLzA/q8yKe+IDQMfugjZMtxRBZTK1fTBH4eJX0
 mWfzR27vMS6jSOTNYDyXSGmZwyJ2eCelnLIHlW2B0HV/hwUxG4Ul37FrNs4U+2atw/5cKiHJ2/Q
 ==
X-Google-Smtp-Source: AGHT+IGTimKn1MOUYxNQAP8spiDky5Z9ZR3lzMihdGflFDnT0WsMvjfhbIHDkuLf6MYH4ewfXOvHjQiAuj0+i6+fFCU=
X-Received: by 2002:a17:907:9494:b0:ab7:ec84:10af with SMTP id
 a640c23a62f3a-abb70b1d813mr1946130066b.16.1739990188318; Wed, 19 Feb 2025
 10:36:28 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 19 Feb 2025 10:36:27 -0800
From: Stefan Kangas <stefankangas@HIDDEN>
In-Reply-To: <m17c5mkpo4.fsf@HIDDEN>
References: <m17c5mkpo4.fsf@HIDDEN>
MIME-Version: 1.0
Date: Wed, 19 Feb 2025 10:36:27 -0800
X-Gm-Features: AWEUYZlLbMhdxyEDmvvgFIlq-h0I5wMmLtga_Ced33vieiPArcZDFfZDVad9ssA
Message-ID: <CADwFkmmWkp_4EQgo5HnSw4hQNB8Ow8OPAF+iPQxUJL5WT1jxQw@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Eshel Yaron via "Bug reports for GNU Emacs, the Swiss army knife of text
editors" <bug-gnu-emacs@HIDDEN> writes:

> This patch adds a new macro 'compf' that streamlines the common pattern
> of function composition.
>
> Namely, instead of (lambda (x) (foo (bar (baz x)))), with this macro we
> can write (compf foo bar baz), which expands to exactly the same form.
>
> This is similar in essence to the "compose" function proposed in
> https://lists.gnu.org/archive/html/emacs-devel/2021-02/msg01138.html
> with the main difference that compf is a macro, not a function, so it
> incurs no runtime performance penalty.
>
> There are many occurrences of function composition in the Emacs code
> base alone that can be simplified with this macro.  For example:
>
> - In lisp/calc/calc-mode.el:
>   (lambda (v) (symbol-value (car v)))       => (compf symbol-value car)
> - In lisp/dired-aux.el:
>   (lambda (dir) (not (file-remote-p dir)))  => (compf not file-remote-p)
> - In lisp/env.el:
>   (lambda (var) (getenv (upcase var)))      => (compf getenv upcase)
> - In lisp/mail/smtpmail.el:
>   (lambda (s) (intern (downcase s)))        => (compf intern downcase)
> - In lisp/net/tramp-container.el:
>   (lambda (line) (car (split-string line))) => (compf car split-line)
> - ...

I'm copying in Stefan Monnier.




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#76413: [PATCH] New macro 'compf' for composing functions
Resent-From: Stefan Kangas <stefankangas@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 19 Feb 2025 18:41:02 +0000
Resent-Message-ID: <handler.76413.B76413.173999041224405 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 76413
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: patch
To: Eshel Yaron <me@HIDDEN>, 76413 <at> debbugs.gnu.org
Cc: Stefan Monnier <monnier@HIDDEN>
Received: via spool by 76413-submit <at> debbugs.gnu.org id=B76413.173999041224405
          (code B ref 76413); Wed, 19 Feb 2025 18:41:02 +0000
Received: (at 76413) by debbugs.gnu.org; 19 Feb 2025 18:40:12 +0000
Received: from localhost ([127.0.0.1]:51450 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tkozT-0006LW-Ol
	for submit <at> debbugs.gnu.org; Wed, 19 Feb 2025 13:40:12 -0500
Received: from mail-ed1-x52b.google.com ([2a00:1450:4864:20::52b]:48383)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <stefankangas@HIDDEN>)
 id 1tkozQ-0006Jy-4h
 for 76413 <at> debbugs.gnu.org; Wed, 19 Feb 2025 13:40:09 -0500
Received: by mail-ed1-x52b.google.com with SMTP id
 4fb4d7f45d1cf-5dedae49c63so106248a12.0
 for <76413 <at> debbugs.gnu.org>; Wed, 19 Feb 2025 10:40:08 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1739990402; x=1740595202; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=EFu5tq9r+fobj2Lqvn9uglgEpcH48XXXJY8hnHOByw0=;
 b=NfsLg1ncaJAAjgBlNKAY87/6owWp5P/7uPXtuwGtreoUcYsIZWyiDoAk60/Dx3g0sd
 YpG3znTVb+eSns3X2uQpZPB+XjMNbDhQpG79r6q/DOl4pZaSPNejW2/miAttYYJPY1xn
 yJP+FwRRsXgUA6GzHNMcV3VOdJlSGy6PHmzmacgCp/IrZvLsFnHfkeUL2ZmcyOJaTaIQ
 mym23KIzroBuPHcyUvZQkFoQs7xx9ttG3cvIsxcMwjexovNvxK3vLXyvqs3c1lu9GopB
 q0nZcOuHe2EFyIBGX3NQ4IE5GuuRk9MB6tnTDE3FdqYaM8uzDfCOSzKE1mFMEu89u+MX
 +rCw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1739990402; x=1740595202;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=EFu5tq9r+fobj2Lqvn9uglgEpcH48XXXJY8hnHOByw0=;
 b=IK/R8yt+hrr1V4fD+U7ljQXaRRdX0/9kSWz5YF6JMf2+hafyYqzT73+KA+wYfx3a30
 WmXQtVXy/xz3HEjQXkjXd/C8QJ9zq659FK8t/7fsVPCeBw2w+4fZGwh1e8OP9JivrhzQ
 TK30L9mjEYO1Cf68fXOnvdNPPm+lKNZ+baJbLdwpkq8fX4j9zkrLsWWbWHv8da+eKlTu
 afWO1i2NYfJYfQ2cbU2cHO6GkTVt4/amby5wZUJTx3tlXmLHsL/dutozpvWTovoCes5v
 WGhgXAD6rTM6vp9wgn0cYUEOcJvOGS4nhyM6u6sPwP46k+MBWSkmDIq8rN00jhh+zmuf
 Y3Lg==
X-Forwarded-Encrypted: i=1;
 AJvYcCW3pLMA8914UagUOBBhQ1sFgQn14NIQuy/OFo85lHo/rIuS5NCfWQCzPB9+22JcVsVCjVf7SA==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YyZFUsYBALe33mLwovxRsKyNLCVXjUEdZC+fB+ooh2YUvQGU21D
 cID+6d4NIE7uqyALUUNlrXBxhTI5UtQ5xIl3uSu3bWdmkZd+wsT/278JZ3Xnj7n0ExDtU2gSFE2
 b0RRUbdvBykYGNcq5LxX8uNZu6CTfI0U/
X-Gm-Gg: ASbGncuCiNol010NGmr8UNId0YK7+grED9Xy4FRjGI/zRHT5MN20ewKzzGhfrAQETuZ
 CH5jWaAwhmyPfTsgjEiIDX1JH0sQbF7ft9YNigE0w2NUjGvLU5oe9yaMzrw47MvhHjRZh1Yknug
 ==
X-Google-Smtp-Source: AGHT+IGBmLFwrv4+9JmhnAGIvc3Fuuzez/PeJGf6FrtJw1GbcYB0o3Lf7xHmTYy8rjndkDJ27+IXPC7c/34BLjUZAK4=
X-Received: by 2002:a05:6402:2385:b0:5e0:51c0:701e with SMTP id
 4fb4d7f45d1cf-5e051c0718dmr9973825a12.32.1739990401948; Wed, 19 Feb 2025
 10:40:01 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 19 Feb 2025 10:40:01 -0800
From: Stefan Kangas <stefankangas@HIDDEN>
In-Reply-To: <m17c5mkpo4.fsf@HIDDEN>
References: <m17c5mkpo4.fsf@HIDDEN>
MIME-Version: 1.0
Date: Wed, 19 Feb 2025 10:40:01 -0800
X-Gm-Features: AWEUYZn56e3LmmlcekyBdpCjBuccz2xIMa8V-BgO6C6mxWB4MSCmBwkNlYfiLss
Message-ID: <CADwFkmnOdHN0fjeAP-cnwOoa2vXqF_NeR=x5i1Dx6VL3hue1TA@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Eshel Yaron via "Bug reports for GNU Emacs, the Swiss army knife of text
editors" <bug-gnu-emacs@HIDDEN> writes:

> Tags: patch
>
> This patch adds a new macro 'compf' that streamlines the common pattern
> of function composition.
>
> Namely, instead of (lambda (x) (foo (bar (baz x)))), with this macro we
> can write (compf foo bar baz), which expands to exactly the same form.
>
> This is similar in essence to the "compose" function proposed in
> https://lists.gnu.org/archive/html/emacs-devel/2021-02/msg01138.html
> with the main difference that compf is a macro, not a function, so it
> incurs no runtime performance penalty.
>
> There are many occurrences of function composition in the Emacs code
> base alone that can be simplified with this macro.  For example:
>
> - In lisp/calc/calc-mode.el:
>   (lambda (v) (symbol-value (car v)))       => (compf symbol-value car)
> - In lisp/dired-aux.el:
>   (lambda (dir) (not (file-remote-p dir)))  => (compf not file-remote-p)
> - In lisp/env.el:
>   (lambda (var) (getenv (upcase var)))      => (compf getenv upcase)
> - In lisp/mail/smtpmail.el:
>   (lambda (s) (intern (downcase s)))        => (compf intern downcase)
> - In lisp/net/tramp-container.el:
>   (lambda (line) (car (split-string line))) => (compf car split-line)
> - ...

Why not name it `compose` as in CL and ELisp?

How about a function with a compiler macro?




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#76413: [PATCH] New macro 'compf' for composing functions
Resent-From: Eshel Yaron <me@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 19 Feb 2025 18:47:02 +0000
Resent-Message-ID: <handler.76413.B76413.173999080727568 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 76413
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: patch
To: "Basil L. Contovounesios" <basil@HIDDEN>
Cc: Michael Albinus <michael.albinus@HIDDEN>, 76413 <at> debbugs.gnu.org
Received: via spool by 76413-submit <at> debbugs.gnu.org id=B76413.173999080727568
          (code B ref 76413); Wed, 19 Feb 2025 18:47:02 +0000
Received: (at 76413) by debbugs.gnu.org; 19 Feb 2025 18:46:47 +0000
Received: from localhost ([127.0.0.1]:51539 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tkp5r-0007AX-Bq
	for submit <at> debbugs.gnu.org; Wed, 19 Feb 2025 13:46:47 -0500
Received: from mail.eshelyaron.com ([107.175.124.16]:55862 helo=eshelyaron.com)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <me@HIDDEN>) id 1tkp5p-0007A5-3k
 for 76413 <at> debbugs.gnu.org; Wed, 19 Feb 2025 13:46:46 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eshelyaron.com;
 s=mail; t=1739990802;
 bh=sZZP0YjwYlVqeCpLWXuIy+sLiqsDo+CFzr4jBL7anpc=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=p1E9cnbD4GnELfD0x5bVaQmAPGJMMDYYIcOhf/i5X9WZ0SskFhcEHF1xJdKVCtyZA
 JluFt0UAgJlO55vVmyZk0PpnXpzvnuQiM9TtS3MU+wLheldvOqyPhA5rYFuE30KApN
 aOmQaU1U48Nmx52h0QBlNptOXYjxMrWe6YshTcFW3cvZTKovYPXTukFEoB39EXHT32
 h/wbjym8Mfl8Jx2f4v/a6xIb9IzMS7kt12soiq6K40TGMMOlqIFbKQ4ygGroIBN7Xw
 Uc2U2JQVkRTILsb4FgVU59e4Rvt7Rlbe8cIPCU1eiH7TeX3Nn3L1g/8aGW7Gv4fujG
 iWnl9t0zy0/vw==
From: Eshel Yaron <me@HIDDEN>
In-Reply-To: <87v7t5j1sw.fsf@HIDDEN>
References: <m17c5mkpo4.fsf@HIDDEN> <87mseic8an.fsf@HIDDEN>
 <m134gakm27.fsf@HIDDEN> <87v7t5j1sw.fsf@HIDDEN>
Date: Wed, 19 Feb 2025 19:46:39 +0100
Message-ID: <m1frk9ixgw.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hi,

"Basil L. Contovounesios" <basil@HIDDEN> writes:

> Eshel Yaron [2025-02-19 16:10 +0100] wrote:
>
>> From e2834b162f3f1fa1c8dc8e057e3aa00950269d8e Mon Sep 17 00:00:00 2001
>> From: Eshel Yaron <me@HIDDEN>
>> Date: Wed, 19 Feb 2025 12:58:40 +0100
>> Subject: [PATCH v2] New macro 'compf' for composing functions
>
> Nice.
>
>> +FUNS may contain symbols which refer to functions, such as `car' and
>> +`cdr' in the example above, and it can also contain `lambda' functions
>> +and other forms which evaluate to function values.
>
> A (declare (debug ...)) property would be nice, particularly for
> stepping through the latter types of argument.

Oh, good idea...  The following spec seems to work well, but I'm not
that experienced with Edebug specs, so improvement suggestions would be
very welcome:

  (declare (debug (&rest &or symbolp vectorp lambda-expr form)))

>>  To refer to a local
>> +variable VAR that is bound to a function, wrap VAR in a vector, as in:
>> +
>> +  (let ((foo (lambda (...) ...)))
>> +    (compf ignore [foo] always))
>
> Is there precedent for this [syntax] somewhere?

Not that I know of.

> I understand that function symbols may be needed more frequently than
> variable symbols in arguments to compf,

Indeed, that's the use case I'm optimizing for.

> but did you consider distinguishing between the two kinds of symbol by
> #'-quoting function symbols, and leaving variables unquoted?  AFAIK
> this has more precedents in Elisp.

I have considered and tried it, and I found that alternative slightly
more cumbersome.  It's nice to be able to pass function names unquoted.
Of course I'm open to reconsider if people have a strong preference.

The way I see it, it's important to support local variables for the sake
of flexibility, but it's more of a niche use case, so it's OK if
specifying a local variable requires a bit more effort, compared to a
named function.

>> +    (let* ((x (gensym "x")) (arg x))
>> +      (dolist (fun (reverse funs))
>> +        (setq arg
>> +              (cond
>> +               ((symbolp fun) `(,fun ,arg))
>> +               ((vectorp fun) `(funcall ,(aref fun 0) ,arg))
>> +               (t `(funcall ,fun ,arg)))))
>> +      `(lambda (,x) ,arg)))))
>
> I wonder if we could/should be smart=E2=84=A2 about the func-arity of the
> rightmost function and adapt the wrapper lambda's arglist accordingly.

Perhaps, could be interesting if we could do it reliably.

> Finally, would you like to write an announcement and some tests as well?

Sure, if there no objections to this addition, I'll some tests and docs.


Eshel





Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#76413: [PATCH] New macro 'compf' for composing functions
Resent-From: Eshel Yaron <me@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Wed, 19 Feb 2025 19:01:02 +0000
Resent-Message-ID: <handler.76413.B76413.17399916211400 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 76413
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: patch
To: Stefan Kangas <stefankangas@HIDDEN>
Cc: Stefan Monnier <monnier@HIDDEN>, 76413 <at> debbugs.gnu.org
Received: via spool by 76413-submit <at> debbugs.gnu.org id=B76413.17399916211400
          (code B ref 76413); Wed, 19 Feb 2025 19:01:02 +0000
Received: (at 76413) by debbugs.gnu.org; 19 Feb 2025 19:00:21 +0000
Received: from localhost ([127.0.0.1]:51702 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tkpIy-0000MN-Uu
	for submit <at> debbugs.gnu.org; Wed, 19 Feb 2025 14:00:21 -0500
Received: from mail.eshelyaron.com ([107.175.124.16]:41170 helo=eshelyaron.com)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <me@HIDDEN>) id 1tkpIv-0000Ks-NT
 for 76413 <at> debbugs.gnu.org; Wed, 19 Feb 2025 14:00:18 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eshelyaron.com;
 s=mail; t=1739991617;
 bh=b3u4ImznH6i9nrNe5G12eRaEJ+lzuSahUWaAyRTBF4s=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=K1PZHozyQcYiIUATjSNynXJvQWGu8I0sE0achukg0Yz/w23bFMyNdMCY585xhQ7hw
 YYrjyzQKBjMJ2wk4oa17keBrgMgbcwz0px1o9L9cWgqKq78R2ghd0fEQtAs2L7OsWl
 DxOuIYZI9rwAbC84xMIy+DMr4/6WNPYcrG0DOReKx+111Kn7KoqzcMNLyz1mEfEZYj
 oAuWQYZr1mjqtgSZ+2XGEzEb+01xyG03waK3EaUmOp8tABPwgMu/EhwugR+TBZ9Uzn
 dqA2b9H1du1eAxHEStQfnEUWc4jTtZc8OjGMzmlQ3DNGbFdNAgjAiQb/XDcCu4WUZm
 W9O6TyYAQzuaA==
From: Eshel Yaron <me@HIDDEN>
In-Reply-To: <CADwFkmnOdHN0fjeAP-cnwOoa2vXqF_NeR=x5i1Dx6VL3hue1TA@HIDDEN>
References: <m17c5mkpo4.fsf@HIDDEN>
 <CADwFkmnOdHN0fjeAP-cnwOoa2vXqF_NeR=x5i1Dx6VL3hue1TA@HIDDEN>
Date: Wed, 19 Feb 2025 20:00:14 +0100
Message-ID: <m1frk9hi9t.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: 0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hi Stefan,

Stefan Kangas <stefankangas@HIDDEN> writes:

> Eshel Yaron via "Bug reports for GNU Emacs, the Swiss army knife of text
> editors" <bug-gnu-emacs@HIDDEN> writes:
>
>> Tags: patch
>>
>> This patch adds a new macro 'compf' that streamlines the common pattern
>> of function composition.
>>
>> Namely, instead of (lambda (x) (foo (bar (baz x)))), with this macro we
>> can write (compf foo bar baz), which expands to exactly the same form.
>
> Why not name it `compose` as in CL and ELisp?

It's a slightly different construct then Common Lisp's compose, so I
feel like calling it by that name could lead to wrong expectations.
Another option is fcomp instead of compf, BTW, if that seems better.

> How about a function with a compiler macro?

That's a valid alternative, but it'd require quoting function names,
which is slightly less concise/convenient.

Do you see a clear advantage for using a function in this case?


Thanks,

Eshel




Message received at control <at> debbugs.gnu.org:


Received: (at control) by debbugs.gnu.org; 22 Feb 2025 23:59:36 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Feb 22 18:59:36 2025
Received: from localhost ([127.0.0.1]:57844 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tlzPE-0005Qa-2W
	for submit <at> debbugs.gnu.org; Sat, 22 Feb 2025 18:59:36 -0500
Received: from mail-ed1-x52e.google.com ([2a00:1450:4864:20::52e]:59499)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <stefankangas@HIDDEN>)
 id 1tlzPA-0005Pz-CF
 for control <at> debbugs.gnu.org; Sat, 22 Feb 2025 18:59:33 -0500
Received: by mail-ed1-x52e.google.com with SMTP id
 4fb4d7f45d1cf-5dec996069aso5330692a12.2
 for <control <at> debbugs.gnu.org>; Sat, 22 Feb 2025 15:59:32 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1740268766; x=1740873566; darn=debbugs.gnu.org;
 h=to:subject:message-id:date:mime-version:from:from:to:cc:subject
 :date:message-id:reply-to;
 bh=Q6lrhZ/Aty8ED6yS6Z3uugIxJ/F5YhqMFfNWOFrw80Q=;
 b=mfOYBM4Atyzz6hyz3f3r0gGvTWVJyLk68lBK+GVwfHfZpz6QuxT78kcyyl1sBDlVN/
 ZlQhjmqVozTTcq5/YusWqtCnLZfvaRbPivwU3XV6MCDUN3IaITnrEkMrOvMpvt32TQx1
 GwKtS0odh3jEIs5WpdYvRluREzaMSWLtWZe3aLVjiR9S6tpKCpc1xKJDpMbX5U7PXsud
 djI7NSRqeZ03Gdyn9A0YCQ9OTTPVPzWJaNTNgKCjjtEI4Ka5TW2bXthIUObg5+0qMFUp
 hoUodGvzQLTrd9uAuk3MBJZwctffvfN1Bd53r56vB4f0uWbzoUw9dvsph1CKuig1Sn1L
 UmpQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1740268766; x=1740873566;
 h=to:subject:message-id:date:mime-version:from:x-gm-message-state
 :from:to:cc:subject:date:message-id:reply-to;
 bh=Q6lrhZ/Aty8ED6yS6Z3uugIxJ/F5YhqMFfNWOFrw80Q=;
 b=Oj9RwevEjikao9Z+yJ2LoQ0Svk5AjkpFAOQTX1X3x/qk/RK+/WdYhHvOaglzdoPerI
 Oer75Dqa7nW++eHb3vPk4Hin3ukdrHxNH2Dz4lTCUrR+MpjYeCJpu6Lk88yZSBi/XbcZ
 lGmV2Q1PF2PabQ9cGP23xaQvvZTgYWgx4y3eIAOzKMmFtYqUTmV8vHfIhsm4i5ZdG7KL
 4xPrwKzwuATmWpy3dV1U8hO15/QTwwmElXZsQuNhNW2Eo8lEARcMRq3M7nr89AZgFI3i
 ODJdo9brzurW321f7b8uKgOjqGvZwtTapqGM5/3YXrcPROQ62EMURpLnyA00aLg7Rbju
 obOw==
X-Gm-Message-State: AOJu0YypzqIqL7AnJjwySqj8A7KvCqrpHASapBKwWMxjwKhxzyeo1qHy
 gvmaQCgfm5waaqQZjy/XR6EUotP/qYSmPvZvsNm3Hm7uT4/Hj5WLVjLPVe2mhluciUx7Y2N1RqF
 bXK8Lm4D7a+3aQQ9alXNfRRG9gOnfCFBJGXU=
X-Gm-Gg: ASbGnctfSHPLTTMtY60OfVAxG0eaP3cWwdkWWkWSPVKUy94Jra+/rIXCp6RxwPjgOto
 7qtM8fzFx89vw9DTHPKGPh1MSnqWmAEBAzJtLf9+mOhDvobTmsMoPJvi2iEqX3777z9C1rmWPtZ
 wxcym0vv+v
X-Google-Smtp-Source: AGHT+IFPrsPY9aK6fOvQks460iBy5p17uBk7ZCWysXQFzBbNSN7mSNCfa5MLa2JXdXwuGStKPqYkAIwPh3PhpfTZRt4=
X-Received: by 2002:a05:6402:51cf:b0:5de:481a:cbc1 with SMTP id
 4fb4d7f45d1cf-5e0b70eff58mr8035106a12.16.1740268766241; Sat, 22 Feb 2025
 15:59:26 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Sat, 22 Feb 2025 23:59:25 +0000
From: Stefan Kangas <stefankangas@HIDDEN>
MIME-Version: 1.0
Date: Sat, 22 Feb 2025 23:59:25 +0000
X-Gm-Features: AWEUYZm6_51af45tPFUdL7H8Oq6Fvr2RTX64kdlf9aYTz4VgK0RA7wl2uKEcSbA
Message-ID: <CADwFkm=tXhM1CQiZ=xwyOHuLxkSo_UUBjj1ikLJUEenTRk5uBw@HIDDEN>
Subject: control message for bug #76413
To: control <at> debbugs.gnu.org
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: control
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

severity 76413 wishlist
quit




Message sent to bug-gnu-emacs@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#76413: [PATCH] New macro 'compf' for composing functions
Resent-From: Stefan Kangas <stefankangas@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-gnu-emacs@HIDDEN
Resent-Date: Sun, 23 Feb 2025 00:14:02 +0000
Resent-Message-ID: <handler.76413.B76413.17402696353167 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 76413
X-GNU-PR-Package: emacs
X-GNU-PR-Keywords: patch
To: Eshel Yaron <me@HIDDEN>
Cc: Stefan Monnier <monnier@HIDDEN>, 76413 <at> debbugs.gnu.org
Received: via spool by 76413-submit <at> debbugs.gnu.org id=B76413.17402696353167
          (code B ref 76413); Sun, 23 Feb 2025 00:14:02 +0000
Received: (at 76413) by debbugs.gnu.org; 23 Feb 2025 00:13:55 +0000
Received: from localhost ([127.0.0.1]:57926 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tlzd4-0000ox-Js
	for submit <at> debbugs.gnu.org; Sat, 22 Feb 2025 19:13:54 -0500
Received: from mail-ed1-x52a.google.com ([2a00:1450:4864:20::52a]:54373)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <stefankangas@HIDDEN>)
 id 1tlzd2-0000oa-Mu
 for 76413 <at> debbugs.gnu.org; Sat, 22 Feb 2025 19:13:53 -0500
Received: by mail-ed1-x52a.google.com with SMTP id
 4fb4d7f45d1cf-5e05717755bso4986064a12.0
 for <76413 <at> debbugs.gnu.org>; Sat, 22 Feb 2025 16:13:52 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1740269626; x=1740874426; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=GlauLH8k4ndf5N3+R76h6gEiZIVpOd1Rgzuu9O5x1j4=;
 b=WFitm6pemXhWzF3rufOg3egzcU+dB6D1Idz2TMqqEQCSwuFd5oEKlroeSyN50BF5N4
 CEmwiOyTsykn3/02NhNOy7cmXqsYs1nBlEY0BYnZeB3uBIQO1Gr+SHoilvTktt6a4RBg
 RW5LvLBpIteSCyPoSUTCI3cTllMTC7rYSma+h5jd0J95Ye49nxjpzmQOTzQvj9+Givwg
 FA5UMJSxhtqBtapMonUJWMJcRikE81cmS+70+N/jMb7qz5gJVwMUE1Q36MibyDDw7vTf
 0NcU/Z0o+w6dplxGSgNaV6PpXEFPrpTwNJvmh9WxY78/wvBpPPNvDIGYDvzFPw3wqyOZ
 VGgw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1740269626; x=1740874426;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=GlauLH8k4ndf5N3+R76h6gEiZIVpOd1Rgzuu9O5x1j4=;
 b=NIMc4+Q478fkIsmNzL/S//HgVVoecpHpikIoEsUdAn0FmUe2GkJEcDaiyH/kk5foXW
 TavwMc45N1Ao4xiKzBAdB4xLA8T3lBMX7VEAhqmBJdgkvlJkE27y9iXKLBTmiofItNp+
 7hO5RRdmuir9gu7oV0PZGD+LJoBAGwsL+ewMZyQt9EWINERdh6khuG61dh5eDvkZjMyu
 hYVytkDyT8t4VTc/e33wZIJ09ENjZlbCI2pXpdLH6RS/6fwfzFntUQdCSo3zvBEBL7QX
 7gzUl0zUkRstCE7N1GbV50HQ16NPbwDnz3hK8yrse7L07fNk+RqbSaOKw00AMoH3iOfu
 iYIg==
X-Forwarded-Encrypted: i=1;
 AJvYcCXI0Y/bm/tyeS8SIaJAmWTfTqyZPY4M3u++jLKVQLVPNXlaAeIbTdijRdI70uGGb4yqNCnTaA==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yy2NZcN6NiilMEZvCE53HV1kXcQl6KE1lqBbFf2dnCIF2xWd9wy
 kBpaK4u/EqOtsd63Rahryt08lfJqjamSANIDkWRO4WMl5IUhLfWdO+rplVTR+I8e0Fypf/W5O49
 qeiCUnvFKhSwCd3ACD9GH65m6dTY=
X-Gm-Gg: ASbGnctUe5MJYRzhV+mNkLFnUtfCiay7cj0Ek/QIFWMsxl0oMcsBKXf2v6W4WqIBIha
 WysKdS4ls8bnS2sntzi962B4ErxpTr/GXrg759TmroRNlC9IIZgncrF/HImVRYdUOX9Ezt/GOkI
 rkl3fiVVGJ
X-Google-Smtp-Source: AGHT+IHdF3z7oooCHs6gp3InINIlzQnA9N+dZxV1ItBfSDb8ZkePEUB9x2H+GcDoblEkNPbpHo51jloTq3k6oY+jENY=
X-Received: by 2002:a05:6402:4589:b0:5df:b0e9:a5da with SMTP id
 4fb4d7f45d1cf-5e0b70f870emr7228678a12.16.1740269626368; Sat, 22 Feb 2025
 16:13:46 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Sun, 23 Feb 2025 00:13:45 +0000
From: Stefan Kangas <stefankangas@HIDDEN>
In-Reply-To: <m1frk9hi9t.fsf@HIDDEN>
References: <m17c5mkpo4.fsf@HIDDEN>
 <CADwFkmnOdHN0fjeAP-cnwOoa2vXqF_NeR=x5i1Dx6VL3hue1TA@HIDDEN>
 <m1frk9hi9t.fsf@HIDDEN>
MIME-Version: 1.0
Date: Sun, 23 Feb 2025 00:13:45 +0000
X-Gm-Features: AWEUYZlLSwNsibp7VSW330jTaS2ToeUSwZ58oIG9WhfshdKqFNyuv_jShvDEkx4
Message-ID: <CADwFkmk93pjBHn2i6wyhi_mtTJCTmFRXKaBK985Qu6u-UKygiA@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Eshel Yaron <me@HIDDEN> writes:

>> Why not name it `compose` as in CL and ELisp?
>
> It's a slightly different construct then Common Lisp's compose, so I
> feel like calling it by that name could lead to wrong expectations.
> Another option is fcomp instead of compf, BTW, if that seems better.

If it is different, then I agree that a different name is in probably in
order.  But see below.

>> How about a function with a compiler macro?
>
> That's a valid alternative, but it'd require quoting function names,
> which is slightly less concise/convenient.
>
> Do you see a clear advantage for using a function in this case?

It's slightly less typing, but also risks being more unclear, as it has
different evaluation rules.  The name `compf` is similarly fine, but to
me comes off as a little bit cryptic.

I think allowing function names to be in variables is also more general
and thus flexible, for instance supporting things like:

    (let ((fun #'some-function))
      (mapcar (compose #'not fun) some-list))

I also forgot to say thanks for digging up the old thread and this idea.
It had completely fallen off my radar.





Last modified: Sun, 23 Feb 2025 00:15:02 UTC

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