From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Colin Woodbury Newsgroups: gmane.lisp.guile.devel Subject: Re: [PATCHv2] Extensions for SRFI-171 (Transducers) Date: Sun, 25 Dec 2022 00:28:13 +0900 Message-ID: <1158f7bf-3093-8c3b-dd74-267f1fbb6f4c@fosskers.ca> References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------Nf57Fe2zh7XBx61Ie7YoI5cm" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="25448"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.0 To: =?UTF-8?Q?Linus_Bj=c3=b6rnstam?= , guile-devel@gnu.org Original-X-From: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Sat Dec 24 16:28:38 2022 Return-path: Envelope-to: guile-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p96Rx-0006Pu-87 for guile-devel@m.gmane-mx.org; Sat, 24 Dec 2022 16:28:38 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1p96Rk-0001PK-VI; Sat, 24 Dec 2022 10:28:25 -0500 Original-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 ) id 1p96Ri-0001KY-Vr for guile-devel@gnu.org; Sat, 24 Dec 2022 10:28:23 -0500 Original-Received: from wout2-smtp.messagingengine.com ([64.147.123.25]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p96Rf-0003kp-OB for guile-devel@gnu.org; Sat, 24 Dec 2022 10:28:22 -0500 Original-Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.west.internal (Postfix) with ESMTP id 6087D3200065; Sat, 24 Dec 2022 10:28:16 -0500 (EST) Original-Received: from mailfrontend2 ([10.202.2.163]) by compute5.internal (MEProxy); Sat, 24 Dec 2022 10:28:16 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fosskers.ca; h= cc:content-type:date:date:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:sender:subject :subject:to:to; s=fm2; t=1671895695; x=1671982095; bh=43QooTCxVw hCTRlgKmAtNwtn1tqV01O/xaSNyZXPk34=; b=CZMaN4/LVGEAAelJCSMVrnWCgp fkZowCO97Yk9f4Y+YkQY82Zm+xqe60UQJFHteBtK97ZRRkM81gfqMAPssz2GRCIR TBPudb7eiXB/DjvM/NU5GOyS/YVCYIA81OwlrncG+qMdBptpq6T3Q1gwhfIClJQB bqN9nhqUzA1S071zPnCY2BDGP6roCNRoZmoWNnMEKVHMZccnMjD6U7MfvuKJ3yZM apG0NFHeJfClJxsqdnaajCfEXmPk3mgd0jOq9/rF19MxntTQyx6SDe1g79Sq5Dpj VxsWjDRLmEiNE9Ezn35IP3NVtNVCTFUplTz1VucQDhoWYLPgQUjnF/qqH7Lw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:sender:subject:subject:to:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; t=1671895695; x=1671982095; bh=43QooTCxVwhCTRlgKmAtNwtn1tqV 01O/xaSNyZXPk34=; b=I6N/7tFZX35mvz1JJHeuhNCMiv2r7la420tiLup/a5AF qB4qgDMi7k2/JR6OtzHBYElkNCp5KDpr4RFEu/HX3R7C7rvdNGvzufvSDyrNTdAz 7EmuJ1F508RRDsiWU0JoDhR62JWpElHnU7wgtU4B+a24g6MqWmwCwXb/p64xqcWN QNa+a1Xb1tphfH2YUw71GGy5xVWohKmzx5JHo+6E5b1L0cyVsbC/DpEFc4r45NoM mSNZFAJkFZJN0KWPrCv7hXEC4i+eA0zEEzEqfsKE4Jb+MXBwgVW2Id3OOZmV4HFL NUT6rnRtee+9BdtXm2csB/PCNGAP3lxieTRuAVvG5w== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrheeggdejkecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpegtkfffgggfuffvfhfhjgesmhdtreertdefjeenucfhrhhomhepveholhhinhcu hghoohgusghurhihuceotgholhhinhesfhhoshhskhgvrhhsrdgtrgeqnecuggftrfgrth htvghrnhepleeugeejgeevtedthfdvkeeiteekieeffffgjeduhfdtfeehheeujeduveek tdeinecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomheptg holhhinhesfhhoshhskhgvrhhsrdgtrg X-ME-Proxy: Feedback-ID: iaef144a3:Fastmail Original-Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sat, 24 Dec 2022 10:28:15 -0500 (EST) Content-Language: en-US In-Reply-To: Received-SPF: none client-ip=64.147.123.25; envelope-from=colin@fosskers.ca; helo=wout2-smtp.messagingengine.com X-Spam_score_int: -38 X-Spam_score: -3.9 X-Spam_bar: --- X-Spam_report: (-3.9 / 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, NICE_REPLY_A=-1.147, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Original-Sender: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.lisp.guile.devel:21526 Archived-At: This is a multi-part message in MIME format. --------------Nf57Fe2zh7XBx61Ie7YoI5cm Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi Linus, great to hear from you. Thanks for the feedback. I've attached new versions of the patches (with your suggested fix), and also an extra 4th commit that adds a short guide for how to write one's own Reducers. Merry Christmas! Colin On 12/21/22 19:00, Linus Björnstam wrote: > As the author of both the SRFI and the guile code I am very happy you like it. I don't have a computer at the moment, but I looked through the code and it looked great. > > All additions should have been included in the original SRFI :) > > one comment: your code uses define-public, which the rest of SRFI-171 code does not. > > I am not in any position to sign code off for inclusion in guile proper, but if the define-public thing is fixed it very much has my blessing. > > Best regards > Linus Björnstam > > On Wed, 21 Dec 2022, at 01:48, Colin Woodbury wrote: >> Happy holidays everyone, I hope everything is going well for you. >> >> Since discovering SRFI-171 (Transducers) I have fallen in love with it. >> Transducers let me "talk the way I want to talk" while knowing that I'm >> being efficient underneath w.r.t. to iteration and allocation. In using >> Guile's implementation, I noticed a few common idioms missing that are >> otherwise present in other languages, so I've added them in a series of >> patches. I've been using these often for a number of weeks without >> issue, but of course have added unit tests as well. >> >> The full details are in the commit messages, but here are the main highlights: >> >> * rfold: The fundamental reducer. This allows the user to turn any >> two-arg function into a valid reducer, so that they don't need to worry >> about hand-writing reducers via case-lambda. >> * rfind: Yields the first item in the transduction that matches some >> predicate. Nice for locating some specific value from a potentially >> large data source (e.g. a port). >> * twindow: Like tsegment, but yields overlapping slices into the data. >> Cheers, and have a great holiday. >> >> Colin >> >> Attachments: >> * 0001-srfi-171-add-twindow-and-various-reducers.patch >> * 0002-doc-add-new-SRFI-171-reducers-to-the-manual.patch >> * 0003-srfi-171-add-unit-tests-for-new-functions.patch --------------Nf57Fe2zh7XBx61Ie7YoI5cm Content-Type: text/x-patch; charset=UTF-8; name="0001-srfi-171-add-twindow-and-various-reducers.patch" Content-Disposition: attachment; filename="0001-srfi-171-add-twindow-and-various-reducers.patch" Content-Transfer-Encoding: base64 RnJvbSA5Njg1NmIxODRhNTA3ODg2ZGIyYzVjMjAzMjM5ODNhZTEyNWE2YmRiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDb2xpbiBXb29kYnVyeSA8Y29saW5AZm9zc2tlcnMu Y2E+CkRhdGU6IE1vbiwgMTkgRGVjIDIwMjIgMDk6Mzk6MzcgKzA5MDAKU3ViamVjdDogW1BB VENIIDEvNF0gc3JmaS0xNzE6IGFkZCB0d2luZG93IGFuZCB2YXJpb3VzIHJlZHVjZXJzCgpU aGlzIGFkZHMgYSBudW1iZXIgb2YgcmVkdWN0aW9uIHByaW1pdGl2ZXMgb2Z0ZW4gc2VlbiBp biBvdGhlciBsYW5ndWFnZXMKdG8gR3VpbGUncyBTUkZJLTE3MSBleHRlbnNpb25zLgoKTW9z dCBjcml0aWNhbCBtYXkgYmUgYHJmb2xkYCwgd2hpY2ggY291bGQgYmUgY2FsbGVkIHRoZSBm dW5kYW1lbnRhbApyZWR1Y2VyLCBhcyBpdCdzIGxpa2VseSB0aGF0IGFsbCBvdGhlciByZWR1 Y2VycyBjb3VsZCBiZSBkZWZpbmVkIGluCnRlcm1zIG9mIGl0ICh0aG91Z2ggbm90IGFsbCBh cmUpLiBXaGlsZSBgdGZvbGRgIGFscmVhZHkgZXhpc3RzIGluCkd1aWxlJ3MgU1JGSS0xNzEg ZXh0ZW5zaW9uIGFzIGEgdHJhbnNkdWNlciwgZm9sZGluZyBpcyBpbiBlc3NlbmNlIGEKcmVk dWN0aW9uLiBBbHNvIHdpdGhvdXQgYSBwcmltYXRpdmUgbGlrZSBgcmxhc3RgIChhbHNvIGlu dHJvZHVjZWQgaGVyZSksCnRoZSByZXN1bHRzIG9mIGB0Zm9sZGAgYXJlIGRpZmZpY3VsdCB0 byBjb25zdW1lLiBUaGlzIGlzIGF2b2lkZWQgYnkKcHJvdmlkaW5nIGByZm9sZGAgZGlyZWN0 bHkgYXMgYSBnZW5lcmFsaXNlZCBtZWFucyB0byBjb2xsYXBzZSBhbiBlbnRpcmUKdHJhbnNk dWN0aW9uIGRvd24gaW50byBhIHNpbmdsZSB2YWx1ZSAoaS5lLiB0aGUgd2hvbGUgcG9pbnQg b2YKcmVkdWNlcnMpLiBgcmZvbGRgIGlzIGFsc28gdXNlZnVsIGZvciB0aGUgY3JlYXRpb24g b2YgYWQtaG9jIHJlZHVjZXJzLAphcyBhbnkgMi1hcmcgZnVuY3Rpb24gY2FuIGJlIHBhc3Nl ZCB0byBpdCB0byBmb2xkIHRoZSBzdHJlYW0gb2YgdmFsdWVzLgoKYHJmaXJzdGAsIGBybGFz dGAsIGFuZCBgcmZpbmRgIGFyZSBjb21tb24gaWRpb21zIGFuZCBzbyBoYXZlIGJlZW4gYWRk ZWQuCgpUaGUgZXF1aXZhbGVudCBvZiBgcm1heGAgYW5kIGBybWluYCBhcmUgZWFzeSB0byB3 cml0ZSBtYW51YWxseSB2aWEKYHJmb2xkYCwgYnV0IHRoZXkgaGF2ZSBiZWVuIHByb3ZpZGVk IGhlcmUgYXMgYSBjb252ZW5pZW5jZSBpbiB0aGUgc2FtZQpzcGlyaXQgYXMgYHJjb25zYC4K CmByZm9yLWVhY2hgIGFsc28gY2Fubm90IGJlIGZvcmdvdHRlbiBhcyBhIGNsYXNzaWMgYWRh cHRhdGlvbiBvZiBpdHMKU1JGSS0xIGNvdXNpbi4KCkFsc28gYWRkZWQgaXMgYHR3aW5kb3dg LCBoYW5keSBmb3IgYW5hbHlzaW5nIGdyb3VwcyBvZiBhZGphY2VudCBpdGVtcy4KLS0tCiBt b2R1bGUvc3JmaS9zcmZpLTE3MS9nbnUuc2NtIHwgODcgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgODUgaW5zZXJ0aW9ucygrKSwgMiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9tb2R1bGUvc3JmaS9zcmZpLTE3MS9nbnUuc2Nt IGIvbW9kdWxlL3NyZmkvc3JmaS0xNzEvZ251LnNjbQppbmRleCA0NWE0ZTE5YWYuLmM0MTky NWU4YSAxMDA2NDQKLS0tIGEvbW9kdWxlL3NyZmkvc3JmaS0xNzEvZ251LnNjbQorKysgYi9t b2R1bGUvc3JmaS9zcmZpLTE3MS9nbnUuc2NtCkBAIC0xNSwxMCArMTUsMTcgQEAKIDs7IEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv biwgTUEgMDIxMTAtMTMwMSBVU0EKIAogKGRlZmluZS1tb2R1bGUgKHNyZmkgc3JmaS0xNzEg Z251KQorICAjOnVzZS1tb2R1bGUgKGljZS05IHEpCiAgICM6dXNlLW1vZHVsZSAoc3JmaSBz cmZpLTE3MSkKICAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMTcxIG1ldGEpCi0gICM6ZXhw b3J0ICh0YmF0Y2ggdGZvbGQpKQotCisgICM6ZXhwb3J0ICh0YmF0Y2gKKyAgICAgICAgICAg IHRmb2xkCisgICAgICAgICAgICB0d2luZG93CisgICAgICAgICAgICByZmluZAorICAgICAg ICAgICAgcmZpcnN0IHJsYXN0CisgICAgICAgICAgICByZm9sZAorICAgICAgICAgICAgcmZv ci1lYWNoCisgICAgICAgICAgICBybWF4IHJtaW4pKQogCiAoZGVmaW5lIHRiYXRjaAogICAo Y2FzZS1sYW1iZGEKQEAgLTYzLDMgKzcwLDc5IEBACiAgICAgICAgICAoaWYgKHJlZHVjZWQ/ IHN0YXRlKQogICAgICAgICAgICAgIChyZWR1Y2VkIChyZWR1Y2VyICh1bnJlZHVjZSBzdGF0 ZSkpKQogICAgICAgICAgICAgIChyIHJlc3VsdCBzdGF0ZSkpKSkpKSkKKworKGRlZmluZSAo dHdpbmRvdyBuKQorICAiWWllbGQgQHZhcntufS1sZW5ndGggd2luZG93cyBvZiBvdmVybGFw cGluZyB2YWx1ZXMuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tCitAY29kZXt0c2VnbWVudH0g d2hpY2ggeWllbGRzIG5vbi1vdmVybGFwcGluZyB3aW5kb3dzLiBJZiB0aGVyZSB3ZXJlCitm ZXdlciBpdGVtcyBpbiB0aGUgaW5wdXQgdGhhbiBAdmFye259LCB0aGVuIHRoaXMgeWllbGRz IG5vdGhpbmcuIgorICAod2hlbiAobm90IChhbmQgKGludGVnZXI/IG4pIChwb3NpdGl2ZT8g bikpKQorICAgICAgICAoZXJyb3IgImFyZ3VtZW50IHRvIHR3aW5kb3cgbXVzdCBiZSBhIHBv c2l0aXZlIGludGVnZXIiKSkKKyAgKGxhbWJkYSAocmVkdWNlcikKKyAgICAobGV0ICgoaSAw KQorICAgICAgICAgIChxIChtYWtlLXEpKSkKKyAgICAgIChjYXNlLWxhbWJkYQorICAgICAg ICAoKCkgKHJlZHVjZXIpKQorICAgICAgICAoKHJlc3VsdCkgKHJlZHVjZXIgcmVzdWx0KSkK KyAgICAgICAgKChyZXN1bHQgaW5wdXQpCisgICAgICAgICAoZW5xISBxIGlucHV0KQorICAg ICAgICAgKHNldCEgaSAoMSsgaSkpCisgICAgICAgICAoY29uZCAoKDwgaSBuKSByZXN1bHQp CisgICAgICAgICAgICAgICAoKD0gaSBuKSAocmVkdWNlciByZXN1bHQgKGxpc3QtY29weSAo Y2FyIHEpKSkpCisgICAgICAgICAgICAgICAoZWxzZSAoZGVxISBxKQorICAgICAgICAgICAg ICAgICAgICAgKHJlZHVjZXIgcmVzdWx0IChsaXN0LWNvcHkgKGNhciBxKSkpKSkpKSkpKQor CisoZGVmaW5lIHJmb3ItZWFjaAorICAoY2FzZS1sYW1iZGEKKyAgICAiUnVuIHRocm91Z2gg ZXZlcnkgaXRlbSBpbiBhIHRyYW5zZHVjdGlvbiBmb3IgdGhlaXIgc2lkZSBlZmZlY3RzIGJ1 dCB0aHJvdyBhd2F5CithbGwgcmVzdWx0cy4iCisgICAgKCgpICp1bnNwZWNpZmllZCopCisg ICAgKChhY2MpICp1bnNwZWNpZmllZCopCisgICAgKChhY2MgaW5wdXQpICp1bnNwZWNpZmll ZCopKSkKKworKGRlZmluZSAocmZpcnN0IHNlZWQpCisgICJZaWVsZCB0aGUgZmlyc3QgdmFs dWUgb2YgdGhlIHRyYW5zZHVjdGlvbiwgb3IgdGhlIEB2YXJ7c2VlZH0gdmFsdWUgaWYgdGhl cmUgaXMgbm9uZS4iCisgIChjYXNlLWxhbWJkYQorICAgICgoKSBzZWVkKQorICAgICgoYWNj KSBhY2MpCisgICAgKChfIGlucHV0KSAocmVkdWNlZCBpbnB1dCkpKSkKKworKGRlZmluZSAo cmxhc3Qgc2VlZCkKKyAgIllpZWxkIHRoZSBmaW5hbCB2YWx1ZSBvZiB0aGUgdHJhbnNkdWN0 aW9uLCBvciB0aGUgQHZhcntzZWVkfSB2YWx1ZSBpZiB0aGVyZSBpcyBub25lLiIKKyAgKGNh c2UtbGFtYmRhCisgICAgKCgpIHNlZWQpCisgICAgKChhY2MpIGFjYykKKyAgICAoKF8gaW5w dXQpIGlucHV0KSkpCisKKyhkZWZpbmUgKHJmb2xkIGYgc2VlZCkKKyAgIlRoZSBmdW5kYW1l bnRhbCByZWR1Y2VyLiBAY29kZXtyZm9sZH0gY3JlYXRlcyBhbiBhZC1ob2MgcmVkdWNlciBi YXNlZCBvbgorYSBnaXZlbiAyLWFyZ3VtZW50IGZ1bmN0aW9uLiBBIEB2YXJ7c2VlZH0gaXMg YWxzbyByZXF1aXJlZCBhcyB0aGUKK2luaXRpYWwgYWNjdW11bGF0b3IgdmFsdWUsIHdoaWNo IGFsc28gYmVjb21lcyB0aGUgcmV0dXJuIHZhbHVlIGluIGNhc2UKK3RoZXJlIHdhcyBubyBp bnB1dCBsZWZ0IGluIHRoZSB0cmFuc2R1Y3Rpb24uCisKK0Z1bmN0aW9ucyBsaWtlIEBjb2Rl eyt9IGFuZCBAY29kZXsqfSBhcmUgYXV0b21hdGljYWxseSB2YWxpZCByZWR1Y2VycywKK2Jl Y2F1c2UgdGhleSB5aWVsZCBzYW5lIHZhbHVlcyBldmVuIHdoZW4gZ2l2ZW4gMCBvciAxIGFy Z3VtZW50cy4gT3RoZXIKK2Z1bmN0aW9ucyBsaWtlIEBjb2Rle21heH0gY2Fubm90IGJlIHVz ZWQgYXMtaXMgYXMgcmVkdWNlcnMgc2luY2UgdGhleQorcmVxdWlyZSBhdCBsZWFzdCAyIGFy Z3VtZW50cy4gRm9yIGZ1bmN0aW9ucyBsaWtlIHRoaXMsIEBjb2Rle3Jmb2xkfSBpcworYXBw cm9wcmlhdGUuIgorICAoY2FzZS1sYW1iZGEKKyAgICAoKCkgc2VlZCkKKyAgICAoKGFjYykg YWNjKQorICAgICgoYWNjIGlucHV0KSAoZiBhY2MgaW5wdXQpKSkpCisKKyhkZWZpbmUgKHJt YXggc2VlZCkKKyAgIllpZWxkIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSB0cmFuc2R1Y3Rp b24sIG9yIHRoZSBAdmFye3NlZWR9IHZhbHVlIGlmCit0aGVyZSBpcyBub25lLiIKKyAgKHJm b2xkIG1heCBzZWVkKSkKKworKGRlZmluZSAocm1pbiBzZWVkKQorICAiWWllbGQgdGhlIG1p bmltdW0gdmFsdWUgb2YgdGhlIHRyYW5zZHVjdGlvbiwgb3IgdGhlIEB2YXJ7c2VlZH0gdmFs dWUgaWYKK3RoZXJlIGlzIG5vbmUuIgorICAocmZvbGQgbWluIHNlZWQpKQorCisoZGVmaW5l IChyZmluZCBwcmVkPykKKyAgIkZpbmQgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHRyYW5z ZHVjdGlvbiB0aGF0IHNhdGlzZmllcyBhIGdpdmVuIHByZWRpY2F0ZS4KK1lpZWxkcyAjZiBp ZiBubyBzdWNoIGVsZW1lbnQgd2FzIGZvdW5kLiIKKyAgKGNhc2UtbGFtYmRhCisgICAgKCgp ICNmKQorICAgICgoYWNjKSBhY2MpCisgICAgKChhY2MgaW5wdXQpIChpZiAocHJlZD8gaW5w dXQpIChyZWR1Y2VkIGlucHV0KSAjZikpKSkKLS0gCjIuMzkuMAoK --------------Nf57Fe2zh7XBx61Ie7YoI5cm Content-Type: text/x-patch; charset=UTF-8; name="0002-doc-add-new-SRFI-171-reducers-to-the-manual.patch" Content-Disposition: attachment; filename="0002-doc-add-new-SRFI-171-reducers-to-the-manual.patch" Content-Transfer-Encoding: base64 RnJvbSA1OGU3Y2EyNzE4YTg2MGNhMmZiNTY5MjY4NGQ2ZDEyOGE3YzFhZTc1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDb2xpbiBXb29kYnVyeSA8Y29saW5AZm9zc2tlcnMu Y2E+CkRhdGU6IFR1ZSwgMjAgRGVjIDIwMjIgMDk6NDE6NTEgKzA5MDAKU3ViamVjdDogW1BB VENIIDIvNF0gZG9jOiBhZGQgbmV3IFNSRkktMTcxIHJlZHVjZXJzIHRvIHRoZSBtYW51YWwK Ci0tLQogZG9jL3JlZi9zcmZpLW1vZHVsZXMudGV4aSB8IDk2ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKystLQogMSBmaWxlIGNoYW5nZWQsIDkxIGluc2VydGlvbnMo KyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3JlZi9zcmZpLW1vZHVsZXMu dGV4aSBiL2RvYy9yZWYvc3JmaS1tb2R1bGVzLnRleGkKaW5kZXggYmNlNWI0ZWFjLi42ZWIx YTU2M2UgMTAwNjQ0Ci0tLSBhL2RvYy9yZWYvc3JmaS1tb2R1bGVzLnRleGkKKysrIGIvZG9j L3JlZi9zcmZpLW1vZHVsZXMudGV4aQpAQCAtNTgzNiw3ICs1ODM2LDcgQEAgaWRlbnRpdHkg aW4gdGhlIHJlZHVjdGlvbi4KIEBjaW5kZXggdHJhbnNkdWNlcnMgcmVkdWNlcnMKIAogQGRl ZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSByY29ucwotYSBzaW1wbGUgY29uc2luZyByZWR1Y2Vy LiBXaGVuIGNhbGxlZCB3aXRob3V0IHZhbHVlcywgaXQgcmV0dXJucyBpdHMKK0Egc2ltcGxl IGNvbnNpbmcgcmVkdWNlci4gV2hlbiBjYWxsZWQgd2l0aG91dCB2YWx1ZXMsIGl0IHJldHVy bnMgaXRzCiBpZGVudGl0eSwgQGNvZGV7JygpfS4gIFdpdGggb25lIHZhbHVlLCB3aGljaCB3 aWxsIGJlIGEgbGlzdCwgaXQgcmV2ZXJzZXMKIHRoZSBsaXN0ICh1c2luZyBAY29kZXtyZXZl cnNlIX0pLiAgV2hlbiBjYWxsZWQgd2l0aCB0d28gdmFsdWVzLCBpdCBjb25zZXMKIHRoZSBz ZWNvbmQgdmFsdWUgdG8gdGhlIGZpcnN0LgpAQCAtNTg0OCw3ICs1ODQ4LDcgQEAgdGhlIHNl Y29uZCB2YWx1ZSB0byB0aGUgZmlyc3QuCiBAZW5kIGRlZmZuCiAKIEBkZWZmbiB7U2NoZW1l IFByb2NlZHVyZX0gcmV2ZXJzZS1yY29ucwotc2FtZSBhcyByY29ucywgYnV0IGxlYXZlcyB0 aGUgdmFsdWVzIGluIHRoZWlyIHJldmVyc2VkIG9yZGVyLgorVGhlIHNhbWUgYXMgQGNvZGV7 cmNvbnN9LCBidXQgbGVhdmVzIHRoZSB2YWx1ZXMgaW4gdGhlaXIgcmV2ZXJzZWQgb3JkZXIu CiBAZXhhbXBsZQogKGxpc3QtdHJhbnNkdWNlICh0bWFwIChsYW1iZGEgKHgpICgrIHggMSkp KSByZXZlcnNlLXJjb25zIChsaXN0IDAgMSAyIDMpKQogQHJlc3VsdHt9ICg0IDMgMiAxKQpA QCAtNTg1Niw3ICs1ODU2LDcgQEAgc2FtZSBhcyByY29ucywgYnV0IGxlYXZlcyB0aGUgdmFs dWVzIGluIHRoZWlyIHJldmVyc2VkIG9yZGVyLgogQGVuZCBkZWZmbgogCiBAZGVmZm4ge1Nj aGVtZSBQcm9jZWR1cmV9IHJhbnkgcHJlZD8KLVRoZSByZWR1Y2VyIHZlcnNpb24gb2YgYW55 LiAgUmV0dXJucyBAY29kZXsocmVkdWNlZCAocHJlZD8gdmFsdWUpKX0gaWYKK1RoZSByZWR1 Y2VyIHZlcnNpb24gb2YgQGNvZGV7YW55fS4gIFJldHVybnMgQGNvZGV7KHJlZHVjZWQgKHBy ZWQ/IHZhbHVlKSl9IGlmCiBhbnkgQGNvZGV7KHByZWQ/IHZhbHVlKX0gcmV0dXJucyBub24t I2YuICBUaGUgaWRlbnRpdHkgaXMgI2YuCiAKIEBleGFtcGxlCkBAIC01ODY5LDcgKzU4Njks NyBAQCBhbnkgQGNvZGV7KHByZWQ/IHZhbHVlKX0gcmV0dXJucyBub24tI2YuICBUaGUgaWRl bnRpdHkgaXMgI2YuCiBAZW5kIGRlZmZuCiAKIEBkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0g cmV2ZXJ5IHByZWQ/Ci1UaGUgcmVkdWNlciB2ZXJzaW9uIG9mIGV2ZXJ5LiAgU3RvcHMgdGhl IHRyYW5zZHVjdGlvbiBhbmQgcmV0dXJucworVGhlIHJlZHVjZXIgdmVyc2lvbiBvZiBAY29k ZXtldmVyeX0uICBTdG9wcyB0aGUgdHJhbnNkdWN0aW9uIGFuZCByZXR1cm5zCiBAY29kZXso cmVkdWNlZCAjZil9IGlmIGFueSBAY29kZXsocHJlZD8gdmFsdWUpfSByZXR1cm5zICNmLiAg SWYgZXZlcnkKIEBjb2RleyhwcmVkPyB2YWx1ZSl9IHJldHVybnMgdHJ1ZSwgaXQgcmV0dXJu cyB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0CiBpbnZvY2F0aW9uIG9mIEBjb2RleyhwcmVkPyB2 YWx1ZSl9LiAgVGhlIGlkZW50aXR5IGlzICN0LgpAQCAtNTg5NCw2ICs1ODk0LDc3IEBAIHRy YW5zZHVjdGlvbi4KIEBlbmQgZXhhbXBsZQogQGVuZCBkZWZmbgogCitAc3ViaGVhZGluZyBH dWlsZS1zcGVjaWZpYyByZWR1Y2VycworVGhlc2UgcmVkdWNlcnMgYXJlIGF2YWlsYWJsZSBp biB0aGUgQGNvZGV7KHNyZmkgc3JmaS0xNzEgZ251KX0gbW9kdWxlLAorYW5kIGFyZSBwcm92 aWRlZCBvdXRzaWRlIHRoZSBzdGFuZGFyZCBkZXNjcmliZWQgYnkgdGhlIFNSRkktMTcxCitk b2N1bWVudC4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSByZm9sZCBwcm9jIHNlZWQK K1RoZSBmdW5kYW1lbnRhbCByZWR1Y2VyLiBAY29kZXtyZm9sZH0gY3JlYXRlcyBhbiBhZC1o b2MgcmVkdWNlciBiYXNlZCBvbgorYSBnaXZlbiAyLWFyZ3VtZW50IEB2YXJ7cHJvY30uIEEg QHZhcntzZWVkfSBpcyByZXF1aXJlZCBhcyB0aGUgaW5pdGlhbAorYWNjdW11bGF0b3IgdmFs dWUsIHdoaWNoIGFsc28gYmVjb21lcyB0aGUgZmluYWwgcmV0dXJuIHZhbHVlIGluIHRoZSBj YXNlCit3aGVyZSB0aGVyZSB3YXMgbm8gaW5wdXQgbGVmdCBpbiB0aGUgdHJhbnNkdWN0aW9u LgorCitUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIEB2YXJ7cHJvY30gaXMgdGhlIGFjY3Vt dWxhdGluZyB2YWx1ZSwgYW5kIHRoZQorc2Vjb25kIGlzIHRoZSBjdXJyZW50IGl0ZW0gb2Yg dGhlIHRyYW5zZHVjdGlvbi4KKworTm90ZSB0aGF0IGZ1bmN0aW9ucyBsaWtlIEBjb2Rleyt9 IGFuZCBAY29kZXsqfSBhcmUgYXV0b21hdGljYWxseSB2YWxpZAorcmVkdWNlcnMsIGJlY2F1 c2UgdGhleSB5aWVsZCBzYW5lIHZhbHVlcyBldmVuIHdoZW4gZ2l2ZW4gMCBvciAxCithcmd1 bWVudHMuIE90aGVyIGZ1bmN0aW9ucyBsaWtlIEBjb2Rle21heH0gY2Fubm90IGJlIHVzZWQg YXMtaXMgYXMKK3JlZHVjZXJzIHNpbmNlIHRoZXkgcmVxdWlyZSBhdCBsZWFzdCAyIGFyZ3Vt ZW50cy4gRm9yIGZ1bmN0aW9ucyBsaWtlCit0aGlzLCBAY29kZXtyZm9sZH0gaXMgYXBwcm9w cmlhdGUuCisKK0BleGFtcGxlCis7OyBUdXJuaW5nIGJ1aWx0LWlucyBpbnRvIHJlZHVjZXJz LiBJZGVudGljYWwgdG8gcm1heC4KKyhsaXN0LXRyYW5zZHVjZSAodGZpbHRlciBvZGQ/KSAo cmZvbGQgbWF4IDApICcoMSAyIDMgNCA1KSkKK0ByZXN1bHR7fSA1CisKKzs7IEN1c3RvbSBs YW1iZGFzIGludG8gcmVkdWNlcnMuIElkZW50aWNhbCB0byBybGFzdC4KKyhsaXN0LXRyYW5z ZHVjZSAodG1hcCBpZGVudGl0eSkKKyAgICAgICAgICAgICAgICAocmZvbGQgKGxhbWJkYSAo XyBpbnB1dCkgaW5wdXQpICNmKQorICAgICAgICAgICAgICAgICcoImFiYyIgImRlZiIgImdo aSIpKQorQHJlc3VsdHt9ICJnaGkiCisKKzs7IFRyYWNrIHRoZSAzIGxhcmdlc3QgdmFsdWVz IGluIGEgdHJhbnNkdWN0aW9uLgorKGRlZmluZSAodGhyZWUtbGFyZ2VzdCBhY2MgaW5wdXQp CisgICh0YWtlIChzb3J0IChjb25zIGlucHV0IGFjYykgPikgMykpCisKKyhsaXN0LXRyYW5z ZHVjZSAodGZpbHRlciBvZGQ/KQorICAgICAgICAgICAgICAgIChyZm9sZCB0aHJlZS1sYXJn ZXN0ICcoMCAwIDApKQorICAgICAgICAgICAgICAgICcoNyAxIDQgMiAxMyA1IDkgMiA4KSkK K0ByZXN1bHR7fSAoMTMgOSA3KQorQGVuZCBleGFtcGxlCitAZW5kIGRlZmZuCisKK0BkZWZm biB7U2NoZW1lIFByb2NlZHVyZX0gcmZpbmQgcHJlZD8KK0ZpbmQgdGhlIGZpcnN0IGVsZW1l bnQgaW4gdGhlIHRyYW5zZHVjdGlvbiB0aGF0IHNhdGlzZmllcyBhIGdpdmVuCitwcmVkaWNh dGUuIFlpZWxkcyAjZiBpZiBubyBzdWNoIGVsZW1lbnQgd2FzIGZvdW5kLgorCitAZXhhbXBs ZQorKGxpc3QtdHJhbnNkdWNlICh0bWFwIGlkZW50aXR5KQorICAgICAgICAgICAgICAgIChy ZmluZCBzdHJpbmc/KQorICAgICAgICAgICAgICAgICcoMSBjICN0IDQuMTIgIkphY2siICgp KSkKK0ByZXN1bHR7fSAiSmFjayIKK0BlbmQgZXhhbXBsZQorQGVuZCBkZWZmbgorCitAZGVm Zm4ge1NjaGVtZSBQcm9jZWR1cmV9IHJmaXJzdCBzZWVkCitAZGVmZm54IHtTY2hlbWUgUHJv Y2VkdXJlfSBybGFzdCBzZWVkCitZaWVsZCB0aGUgZmlyc3QgKG9yIGxhc3QpIHZhbHVlIG9m IHRoZSB0cmFuc2R1Y3Rpb24sIG9yIHRoZSBAdmFye3NlZWR9Cit2YWx1ZSBpZiB0aGVyZSBp cyBub25lLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IHJmb3It ZWFjaCBwcm9jCitBcHBseSBAdmFye3Byb2N9IGZvciBpdHMgc2lkZS1lZmZlY3RzIHRvIGV2 ZXJ5IHZhbHVlIG9mIHRoZQordHJhbnNkdWN0aW9uLCBpZ25vcmluZyBhbGwgcmVzdWx0cy4g TGlrZSBpdHMgQHJlZntTUkZJLTF9IGNvdXNpbiwgeWllbGRzCitAY29kZXsqdW5zcGVjaWZp ZWQqfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBybWF4IHNl ZWQKK0BkZWZmbngge1NjaGVtZSBQcm9jZWR1cmV9IHJtaW4gc2VlZAorWWllbGQgdGhlIG1h eGltdW0gKG9yIG1pbmltdW0pIHZhbHVlIG9mIHRoZSB0cmFuc2R1Y3Rpb24sIG9yIHRoZQor QHZhcntzZWVkfSB2YWx1ZSBpZiB0aGVyZSBpcyBub25lLgorQGVuZCBkZWZmbgogCiBAbm9k ZSBTUkZJLTE3MSBUcmFuc2R1Y2VycwogQHN1YnN1YnNlY3Rpb24gVHJhbnNkdWNlcnMKQEAg LTYwNTcsNyArNjEyOCw3IEBAIFN0YXRlbGVzcy4KIAogQHN1YmhlYWRpbmcgR3VpbGUtc3Bl Y2lmaWMgdHJhbnNkdWNlcnMKIFRoZXNlIHRyYW5zZHVjZXJzIGFyZSBhdmFpbGFibGUgaW4g dGhlIEBjb2RleyhzcmZpIHNyZmktMTcxIGdudSl9Ci1saWJyYXJ5LCBhbmQgYXJlIHByb3Zp ZGVkIG91dHNpZGUgdGhlIHN0YW5kYXJkIGRlc2NyaWJlZCBieSB0aGUgU1JGSS0xNzEKK21v ZHVsZSwgYW5kIGFyZSBwcm92aWRlZCBvdXRzaWRlIHRoZSBzdGFuZGFyZCBkZXNjcmliZWQg YnkgdGhlIFNSRkktMTcxCiBkb2N1bWVudC4KIAogQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJl fSB0YmF0Y2ggcmVkdWNlcgpAQCAtNjA4NSw2ICs2MTU2LDIxIEBAIHZhbHVlKX0sIHNhdmlu ZyBpdCdzIHJlc3VsdCBiZXR3ZWVuIGl0ZXJhdGlvbnMuCiBAZW5kIGV4YW1wbGUKIEBlbmQg ZGVmZm4KIAorQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSB0d2luZG93IG4KKworUmV0dXJu cyBhIHRyYW5zZHVjZXIgdGhhdCB5aWVsZHMgQHZhcntufS1sZW5ndGggd2luZG93cyBvZiBv dmVybGFwcGluZwordmFsdWVzLiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIEBjb2Rle3RzZWdt ZW50fSB3aGljaCB5aWVsZHMKK25vbi1vdmVybGFwcGluZyB3aW5kb3dzLiBJZiB0aGVyZSB3 ZXJlIGZld2VyIGl0ZW1zIGluIHRoZSBpbnB1dCB0aGFuCitAdmFye259LCB0aGVuIHRoaXMg eWllbGRzIG5vdGhpbmcuCisKK0BleGFtcGxlCisobGlzdC10cmFuc2R1Y2UgKHR3aW5kb3cg MykgcmNvbnMgJygxIDIgMyA0IDUpKQorQHJlc3VsdHt9ICgoMSAyIDMpICgyIDMgNCkgKDMg NCA1KSkKK0BlbmQgZXhhbXBsZQorCitTdGF0ZWZ1bC4KK0BlbmQgZGVmZm4KKwogCiBAbm9k ZSBTUkZJLTE3MSBIZWxwZXJzCiBAc3Vic3Vic2VjdGlvbiBIZWxwZXIgZnVuY3Rpb25zIGZv ciB3cml0aW5nIHRyYW5zZHVjZXJzCi0tIAoyLjM5LjAKCg== --------------Nf57Fe2zh7XBx61Ie7YoI5cm Content-Type: text/x-patch; charset=UTF-8; name="0003-srfi-171-add-unit-tests-for-new-functions.patch" Content-Disposition: attachment; filename="0003-srfi-171-add-unit-tests-for-new-functions.patch" Content-Transfer-Encoding: base64 RnJvbSA3Yjc1MzhjNjE3OTlmYTBmYTBlMmZhMThlZmJhOThiN2RlN2RhMWNhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDb2xpbiBXb29kYnVyeSA8Y29saW5AZm9zc2tlcnMu Y2E+CkRhdGU6IFdlZCwgMjEgRGVjIDIwMjIgMDk6MzA6NTAgKzA5MDAKU3ViamVjdDogW1BB VENIIDMvNF0gc3JmaS0xNzE6IGFkZCB1bml0IHRlc3RzIGZvciBuZXcgZnVuY3Rpb25zCgpU aGVzZSB0ZXN0cyBtYWlubHkgbWF0Y2ggdGhlIGV4YW1wbGVzIHNob3duIGluIHRoZSBkb2Nz LgotLS0KIHRlc3Qtc3VpdGUvdGVzdHMvc3JmaS0xNzEudGVzdCB8IDY2ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2MCBpbnNlcnRpb25z KCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Rlc3Qtc3VpdGUvdGVzdHMvc3Jm aS0xNzEudGVzdCBiL3Rlc3Qtc3VpdGUvdGVzdHMvc3JmaS0xNzEudGVzdAppbmRleCAxZWY3 YmM1ZjIuLmQxZDU0YjJlYyAxMDA2NDQKLS0tIGEvdGVzdC1zdWl0ZS90ZXN0cy9zcmZpLTE3 MS50ZXN0CisrKyBiL3Rlc3Qtc3VpdGUvdGVzdHMvc3JmaS0xNzEudGVzdApAQCAtMjA3LDE1 ICsyMDcsNjkgQEAKICAgICAgICAgICAgIChsaXN0LXRyYW5zZHVjZSAodGVudW1lcmF0ZSAo LSAxKSkgcmNvbnMgbnVtZXJpYy1saXN0KSkpCiAKICAgKHBhc3MtaWYgInRiYXRjaCIKLSAg ICAoZXF1YWw/Ci0gICAgICAgICAgICAnKCgwIDEpICgyIDMpICg0KSkKKyAgICAoZXF1YWw/ ICcoKDAgMSkgKDIgMykgKDQpKQogICAgICAgICAgICAgKGxpc3QtdHJhbnNkdWNlICh0YmF0 Y2ggKHR0YWtlIDIpIHJjb25zKSByY29ucyBudW1lcmljLWxpc3QpKSkKIAogICAocGFzcy1p ZiAidGZvbGQiCi0gICAgICAgICAgIChlcXVhbD8KLSAgICAgICAgICAgICcoMCAxIDMgNiAx MCkKLSAgICAgICAgICAgIChsaXN0LXRyYW5zZHVjZSAodGZvbGQgKykgcmNvbnMgbnVtZXJp Yy1saXN0KSkpKQotCisgICAgKGVxdWFsPyAnKDAgMSAzIDYgMTApCisgICAgICAgICAgICAo bGlzdC10cmFuc2R1Y2UgKHRmb2xkICspIHJjb25zIG51bWVyaWMtbGlzdCkpKQorCisgIChw YXNzLWlmICJ0d2luZG93OiB0b28gd2lkZSBvZiBhIHdpbmRvdyIKKyAgICAoZXF1YWw/ICco KQorICAgICAgICAgICAgKGxpc3QtdHJhbnNkdWNlICh0d2luZG93IDEwKSByY29ucyAnKDEg MiAzKSkpKQorCisgIChwYXNzLWlmICJ0d2luZG93OiBhY2NlcHRhYmxlIHdpbmRvdyIKKyAg ICAoZXF1YWw/ICcoKDEgMiAzKSAoMiAzIDQpICgzIDQgNSkpCisgICAgICAgICAgICAobGlz dC10cmFuc2R1Y2UgKHR3aW5kb3cgMykgcmNvbnMgJygxIDIgMyA0IDUpKSkpKQorCisod2l0 aC10ZXN0LXByZWZpeCAicmVkdWNlcnMiCisgIChwYXNzLWlmICJyZm9sZDogYnVpbHRpbiIK KyAgICAoZXF1YWw/IDUKKyAgICAgICAgICAgIChsaXN0LXRyYW5zZHVjZSAodGZpbHRlciBv ZGQ/KSAocmZvbGQgbWF4IDApICcoMSAyIDMgNCA1KSkpKQorCisgIChwYXNzLWlmICJyZm9s ZDogY3VzdG9tIGxhbWJkYSIKKyAgICAoZXF1YWw/ICJnaGkiCisgICAgICAgICAgICAobGlz dC10cmFuc2R1Y2UgKHRtYXAgaWRlbnRpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHJmb2xkIChsYW1iZGEgKF8gaW5wdXQpIGlucHV0KSAjZikKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnKCJhYmMiICJkZWYiICJnaGkiKSkpKQorCisgIChwYXNzLWlmICJy Zmlyc3Q6IGVtcHR5IgorICAgIChlcXVhbD8gMAorICAgICAgICAgICAgKGxpc3QtdHJhbnNk dWNlICh0bWFwIGlkZW50aXR5KSAocmZpcnN0IDApICcoKSkpKQorCisgIChwYXNzLWlmICJy Zmlyc3Q6IG5vbi1lbXB0eSIKKyAgICAoZXF1YWw/IDEKKyAgICAgICAgICAgIChsaXN0LXRy YW5zZHVjZSAodG1hcCBpZGVudGl0eSkgKHJmaXJzdCAwKSAnKDEgMiAzKSkpKQorCisgIChw YXNzLWlmICJybGFzdDogZW1wdHkiCisgICAgKGVxdWFsPyAwCisgICAgICAgICAgICAobGlz dC10cmFuc2R1Y2UgKHRmaWx0ZXIgKGxhbWJkYSAoXykgI2YpKSAocmxhc3QgMCkgJygxIDIg MykpKSkKKworICAocGFzcy1pZiAicmxhc3Q6IG5vbi1lbXB0eSIKKyAgICAoZXF1YWw/IDUK KyAgICAgICAgICAgIChsaXN0LXRyYW5zZHVjZSAodG1hcCBpZGVudGl0eSkgKHJsYXN0IDAp ICcoMSAyIDMgNCA1KSkpKQorCisgIChwYXNzLWlmICJybWF4OiBlbXB0eSIKKyAgICAoZXF1 YWw/IDAKKyAgICAgICAgICAgIChsaXN0LXRyYW5zZHVjZSAodG1hcCBpZGVudGl0eSkgKHJt YXggMCkgJygpKSkpCisKKyAgKHBhc3MtaWYgInJtYXg6IG5vbi1lbXB0eSIKKyAgICAoZXF1 YWw/IDMxCisgICAgICAgICAgICAobGlzdC10cmFuc2R1Y2UgKHRtYXAgaWRlbnRpdHkpIChy bWF4IDApICcoMSAyIDMxIDQgNSkpKSkKKworICAocGFzcy1pZiAicm1pbjogZW1wdHkiCisg ICAgKGVxdWFsPyAwCisgICAgICAgICAgICAobGlzdC10cmFuc2R1Y2UgKHRtYXAgaWRlbnRp dHkpIChybWluIDApICcoKSkpKQorCisgIChwYXNzLWlmICJybWluOiBub24tZW1wdHkiCisg ICAgKGVxdWFsPyAxCisgICAgICAgICAgICAobGlzdC10cmFuc2R1Y2UgKHRtYXAgaWRlbnRp dHkpIChybWluIDEwMDApICcoNSAzIDEgNyA2KSkpKQorCisgIChwYXNzLWlmICJyZmluZCIK KyAgICAoZXF1YWw/ICJKYWNrIgorICAgICAgICAgICAgKGxpc3QtdHJhbnNkdWNlICh0bWFw IGlkZW50aXR5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZmluZCBzdHJpbmc/ KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoMSBjICN0IDQuMTIgIkphY2siICgp KSkpKSkKIAogKHdpdGgtdGVzdC1wcmVmaXggIngtdHJhbnNkdWNlIgogICAocGFzcy1pZiAi bGlzdC10cmFuc2R1Y2UiIAotLSAKMi4zOS4wCgo= --------------Nf57Fe2zh7XBx61Ie7YoI5cm Content-Type: text/x-patch; charset=UTF-8; name="0004-doc-added-a-guide-for-writing-custom-reducers.patch" Content-Disposition: attachment; filename="0004-doc-added-a-guide-for-writing-custom-reducers.patch" Content-Transfer-Encoding: base64 RnJvbSA4N2E3NGQxMDZmMTE2ODBjNDkyNGJlZmI2NjRkN2VmNjg1YzE2YjA2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDb2xpbiBXb29kYnVyeSA8Y29saW5AZm9zc2tlcnMu Y2E+CkRhdGU6IFRodSwgMjIgRGVjIDIwMjIgMjA6MzI6MzMgKzA5MDAKU3ViamVjdDogW1BB VENIIDQvNF0gZG9jOiBhZGRlZCBhIGd1aWRlIGZvciB3cml0aW5nIGN1c3RvbSByZWR1Y2Vy cwoKVGhlIGd1aWRlIHByZXZpb3VzbHkgZXhwbGFpbmVkIHdoYXQgcmVkdWNlcnMgd2VyZSwg YnV0IG5vdCB0aGUgc3BlY2lmaWNzCm9mIGhvdyB0byB3cml0ZSB0aGVtIHlvdXJzZWxmLiBU aGlzIGNvbW1pdHMgcmVjdGlmaWVzIHRoaXMuCi0tLQogZG9jL3JlZi9zcmZpLW1vZHVsZXMu dGV4aSB8IDc2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBm aWxlIGNoYW5nZWQsIDc2IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9kb2MvcmVmL3Ny ZmktbW9kdWxlcy50ZXhpIGIvZG9jL3JlZi9zcmZpLW1vZHVsZXMudGV4aQppbmRleCA2ZWIx YTU2M2UuLmUzYmViMmZmNSAxMDA2NDQKLS0tIGEvZG9jL3JlZi9zcmZpLW1vZHVsZXMudGV4 aQorKysgYi9kb2MvcmVmL3NyZmktbW9kdWxlcy50ZXhpCkBAIC01OTY2LDYgKzU5NjYsODIg QEAgWWllbGQgdGhlIG1heGltdW0gKG9yIG1pbmltdW0pIHZhbHVlIG9mIHRoZSB0cmFuc2R1 Y3Rpb24sIG9yIHRoZQogQHZhcntzZWVkfSB2YWx1ZSBpZiB0aGVyZSBpcyBub25lLgogQGVu ZCBkZWZmbgogCitAc3ViaGVhZGluZyBXcml0aW5nIHlvdXIgb3duIHJlZHVjZXJzCitJZiB5 b3Ugd2FudCB0byByZWR1Y2Ugc29tZSB2YWx1ZXMgdmlhIGFuIG9yZGluYXJ5IGZ1bmN0aW9u IHRoYXQgeW91CithbHJlYWR5IGhhdmUgb24taGFuZCwgdGhlbiBAY29kZXtyZm9sZH0gaXMg YWxsIHlvdSBuZWVkOgorCitAZXhhbXBsZQorOzsgU2FtZSBhcyBybWF4LgorKGxpc3QtdHJh bnNkdWNlICh0bWFwIGlkZW50aXR5KSAocmZvbGQgbWF4IDApICcoMSAyIDMgNCA1KSkKK0By ZXN1bHR7fSA1CitAZW5kIGV4YW1wbGUKKworSG93ZXZlciwgaWYgeW91IHdhbnQgbW9yZSBj dXN0b21pemVkIGJlaGF2aW91ciAoc3VjaCBhcyBlYXJseQordGVybWluYXRpb24gYW5kL29y IGFyYml0cmFyeSBtYW5pcHVsYXRpb24gb2YgdGhlIGlucHV0IHZhbHVlcykgdGhlbgoreW91 J3JlIGZyZWUgdG8gd3JpdGUgYSByZWR1Y2VyIG1hbnVhbGx5LiBUbyBkbyBzbywgd2UgbmVl ZCB0byB3cml0ZSBhCitmdW5jdGlvbiB0aGF0IGNhbiBhY2NlcHQgb25lIHRvIHRocmVlIGFy Z3VtZW50cy4gV2UgZG8gdGhpcyB3aXRoCitAY29kZXtjYXNlLWxhbWJkYX0uIExldCdzIGNy ZWF0ZSBhIHNpbXBsZSByZWR1Y2VyIHRoYXQgYWRkcyBhbGwgdGhlCitudW1iZXJzIGluIGl0 cyBpbnB1dDoKKworQGV4YW1wbGUKKyhkZWZpbmUgcnN1bQorICAoY2FzZS1sYW1iZGEKKyAg ICA7OyBUaGlzIGlzIHRoZSBmaXJzdCBjYXNlIGNhbGxlZC4gSXQgZXN0YWJsaXNoZXMgdGhl IG9uLWdvaW5nCisgICAgOzsgYWNjdW11bGF0b3IgdmFsdWUuCisgICAgKCgpIDApCisgICAg OzsgVGhpcyBpcyB0aGUgbGFzdCBjYXNlIGNhbGxlZC4gSXRzIHJlc3VsdCBpcyB0aGUgZmlu YWwgb3V0cHV0CisgICAgOzsgb2YgdGhlIHJlZHVjdGlvbi4KKyAgICAoKHJlc3VsdC1zby1m YXIpIHJlc3VsdC1zby1mYXIpCisgICAgOzsgVGhpcyBpcyB0aGUgbm9ybWFsIGNhc2UuIFdl IGRvIHNvbWV0aGluZyB0byB0aGUgYWNjdW11bGF0b3IKKyAgICA7OyBhbmQgdGhlIGN1cnJl bnQgaW5wdXQuCisgICAgKChyZXN1bHQtc28tZmFyIGlucHV0KSAoKyByZXN1bHQtc28tZmFy IGlucHV0KSkpCisKKyhsaXN0LXRyYW5zZHVjZSAodGZpbHRlciBvZGQ/KSByc3VtICcoMSAy IDMgNCkpCitAcmVzdWx0e30gNAorQGVuZCBleGFtcGxlCisKK1lvdSdsbCBub3RpY2UgdGhh dCBAY29kZXtyc3VtfSBpc24ndCBhY3R1YWxseSBpbmNsdWRlZCBpbiBTUkZJLTE3MSwKK2Jl Y2F1c2UgQGNvZGV7K30gYWxyZWFkeSBiZWhhdmVzIGV4YWN0bHkgdGhpcyB3YXkuCisKK0Bz dWJzdWJoZWFkaW5nIEhpZ2hlci1vcmRlciByZWR1Y2VycworT2YgY291cnNlLCB0aGUgdG9w LWxldmVsIEBjb2Rle2RlZmluZX0gY2FuIGFsc28gdGFrZSBhcmd1bWVudHMsIGFuZCB3ZQor Y2FuIHVzZSB0aGVzZSB3aXRoaW4gdGhlIEBjb2Rle2Nhc2UtbGFtYmRhfS4gSGVyZSdzIGhv dyBAY29kZXtybGFzdH0gaXMKK2ltcGxlbWVudGVkOgorCitAZXhhbXBsZQorKGRlZmluZSAo cmxhc3Qgc2VlZCkKKyAgKGNhc2UtbGFtYmRhCisgICAgKCgpIHNlZWQpCisgICAgKChyZXN1 bHQtc28tZmFyKSByZXN1bHQtc28tZmFyKQorICAgICgoXyBpbnB1dCkgaW5wdXQpKSkKKwor KGxpc3QtdHJhbnNkdWNlICh0ZmlsdGVyIG9kZD8pIChybGFzdCAwKSAnKDEgMiAzIDQgNSA2 KSkKK0ByZXN1bHR7fSA1CitAZW5kIGV4YW1wbGUKKworVGhlIEBjb2Rle3NlZWR9IGhlcmUg YWN0cyBhcyBhIGRlZmF1bHQgZm9yIHdoZW4gbm90aGluZyB3YXMgbGVmdCBpbiB0aGUKK3Ry YW5zZHVjdGlvbi4gWW91J3JlIGZyZWUgb2YgY291cnNlIHRvIHBhc3MgaW4gd2hhdGV2ZXIg YXJndW1lbnRzIHlvdQord2lzaCAoaW5jbHVkaW5nIG90aGVyIGZ1bmN0aW9ucykgYW5kIHVz ZSB0aGVtIGFzIHlvdSBzZWUgZml0LgorCitAc3Vic3ViaGVhZGluZyBFYXJseSB0ZXJtaW5h dGlvbgorSW1wb3J0aW5nIEBjb2RleyhzcmZpIHNyZmktMTcxIG1ldGEpfSBleHBvc2VzIHRo ZSBAY29kZXtyZWR1Y2VkfQorZnVuY3Rpb24sIHdoaWNoIHdlIGNhbiB1c2UgdG8gc2lnbmFs IHRvIHRoZSBvdmVyYWxsIHRyYW5zZHVjdGlvbiBwcm9jZXNzCit0aGF0IHdlJ3JlIGRvbmUs IGFuZCBubyBmdXJ0aGVyIGlucHV0IG5lZWRzIHRvIGJlIHB1bGxlZCBmcm9tIHRoZSBkYXRh Citzb3VyY2UuIEhlcmUncyBAY29kZXtyZmluZH0gKGFscmVhZHkgaW5jbHVkZWQgaW4gR3Vp bGUncyBTUkZJLTE3MQorZXh0ZW5zaW9ucykgd2hpY2ggZXNjYXBlcyB0aGUgaXRlcmF0aW9u IHdoZW4gc29tZSBjb25kaXRpb24gaXMgbWV0OgorCitAZXhhbXBsZQorKGRlZmluZSAocmZp bmQgcHJlZD8pCisgIChjYXNlLWxhbWJkYQorICAgICgoKSAjZikKKyAgICAoKGFjYykgYWNj KQorICAgICgoYWNjIGlucHV0KSAoaWYgKHByZWQ/IGlucHV0KSAocmVkdWNlZCBpbnB1dCkg I2YpKSkpCitAZW5kIGV4YW1wbGUKKworSW1wb3J0YW50IG5vdGU6IGNhbGxpbmcgQGNvZGV7 cmVkdWNlZH0geW91cnNlbGYgbGlrZSB0aGlzIGRvZXMgYWN0aXZhdGUKK3RoZSBmaW5hbCBy ZXN1bHRzLW9ubHkgYnJhbmNoLCBzbyBhbnkgZXh0cmEgZWZmZWN0cyBvciBtYW5pcHVsYXRp b25zIHlvdQoraGF2ZSB0aGVyZSB3aWxsIGFsc28gb2NjdXIuCisKIEBub2RlIFNSRkktMTcx IFRyYW5zZHVjZXJzCiBAc3Vic3Vic2VjdGlvbiBUcmFuc2R1Y2VycwogQGNpbmRleCB0cmFu c2R1Y2VycyB0cmFuc2R1Y2VycwotLSAKMi4zOS4wCgo= --------------Nf57Fe2zh7XBx61Ie7YoI5cm--