<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto">+1 for dup either exported by Data.Tuple or via Data.Arrow in greater generality.<br><br><div id="AppleMailSignature" dir="ltr">Sent from my iPhone</div><div dir="ltr"><br>On Jul 17, 2019, at 1:49 PM, Jon Purdy <<a href="mailto:evincarofautumn@gmail.com">evincarofautumn@gmail.com</a>> wrote:<br><br></div><blockquote type="cite"><div dir="ltr"><div dir="auto"><div>I often define this in my own code (especially arrowful/pointfree code) as ‘dup = join (,)’—a fairly common name for this from the lands of category theory and concatenative programming, and a common abbreviation of ‘duplicate’ in other contexts like the aforementioned dup(2) for file descriptors.</div><div dir="auto"><br></div><div dir="auto">It’s fundamental enough a logical operation (contraction) to warrant a name, in my opinion—we already have ‘const’ for weakening and ‘flip’ for exchange.<br><br><div class="gmail_quote" dir="auto"><div dir="ltr" class="gmail_attr">On Wed, Jul 17, 2019, 05:10 Malcolm Wallace via Libraries <<a href="mailto:libraries@haskell.org">libraries@haskell.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I think hiding the function (\x->(x,x)) behind any of these indirections (dup, join (,), or (id&&&id)) is just wilful obfuscation.  The clearest and most direct way to understand the function is to use the lambda - it needs no hard-to-remember name.<br>
<br>
M.<br>
<br>
On 16 Jul 2019, at 20:56, Vladislav Zavialov wrote:<br>
<br>
> It is reasonably common. I have grepped Hackage using <a href="https://codesearch.aelve.com/haskell/" rel="noreferrer noreferrer" target="_blank">https://codesearch.aelve.com/haskell/</a> and<br>
> <br>
> * \x->(x,x) occurs 203 times<br>
> * join (,) occurs 53 times<br>
> * id &&& id occurs 22 times<br>
> <br>
> It also pops up in discussions as a counter-example of a linear function:<br>
> <br>
> dup :: a ->. (a,a)<br>
> dup x = (x,x)  -- does not typecheck with -XLinearTypes!<br>
> <br>
> I think it should be added under the name "dup" (short for “duplicate”).<br>
> <br>
> - Vlad<br>
> <br>
>> On 16 Jul 2019, at 22:29, Lennart Augustsson <<a href="mailto:lennart@augustsson.net" target="_blank" rel="noreferrer">lennart@augustsson.net</a>> wrote:<br>
>> <br>
>> It's not harmful, but is it common enough to have a name?<br>
>> <br>
>> On Tue, Jul 16, 2019, 12:28 Ignat Insarov <<a href="mailto:kindaro@gmail.com" target="_blank" rel="noreferrer">kindaro@gmail.com</a>> wrote:<br>
>> So, it is not considered harmful. Then I propose we add it to<br>
>> Data.Tuple under a humane name.<br>
>> <br>
>> On Tue, 16 Jul 2019 at 19:41, Lennart Augustsson <<a href="mailto:lennart@augustsson.net" target="_blank" rel="noreferrer">lennart@augustsson.net</a>> wrote:<br>
>>> <br>
>>> Or 'join (,)'<br>
>>> <br>
>>> On Tue, Jul 16, 2019, 09:26 Zemyla <<a href="mailto:zemyla@gmail.com" target="_blank" rel="noreferrer">zemyla@gmail.com</a>> wrote:<br>
>>>> <br>
>>>> id &&& id<br>
>>>> <br>
>>>> On Tue, Jul 16, 2019, 10:58 Ignat Insarov <<a href="mailto:kindaro@gmail.com" target="_blank" rel="noreferrer">kindaro@gmail.com</a>> wrote:<br>
>>>>> <br>
>>>>> Hello.<br>
>>>>> <br>
>>>>> I wonder if there is a function like \x -> (x, x) in the standard libraries.<br>
>>>>> <br>
>>>>> I looked up in Hoogle. It gave me links:<br>
>>>>> <br>
>>>>> 1. <a href="https://hackage.haskell.org/package/utility-ht/docs/Data-Tuple-HT.html#v:double" rel="noreferrer noreferrer" target="_blank">https://hackage.haskell.org/package/utility-ht/docs/Data-Tuple-HT.html#v:double</a><br>
>>>>> 2. <a href="https://hackage.haskell.org/package/extra/docs/Data-Tuple-Extra.html#v:dupe" rel="noreferrer noreferrer" target="_blank">https://hackage.haskell.org/package/extra/docs/Data-Tuple-Extra.html#v:dupe</a><br>
>>>>> 3. <a href="https://hackage.haskell.org/package/relude/docs/Relude-Extra-Tuple.html#v:dupe" rel="noreferrer noreferrer" target="_blank">https://hackage.haskell.org/package/relude/docs/Relude-Extra-Tuple.html#v:dupe</a><br>
>>>>> <br>
>>>>> None of these is to the standard library. I wonder if there is an<br>
>>>>> intentional omission for some important reason? If not, I think this<br>
>>>>> function should be added to Data.Tuple.<br>
>>>>> <br>
>>>>> I know some of the persons that make decisions here like Category<br>
>>>>> theory, so I point out this function is mentioned in Categories for<br>
>>>>> the Working Mathematician, as δ, the diagonal function, on page 3<br>
>>>>> (second edition), although set with angular brackets.<br>
>>>>> <br>
>>>>> Have a great day.<br>
>>>>> _______________________________________________<br>
>>>>> Libraries mailing list<br>
>>>>> <a href="mailto:Libraries@haskell.org" target="_blank" rel="noreferrer">Libraries@haskell.org</a><br>
>>>>> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
>>>> <br>
>>>> _______________________________________________<br>
>>>> Libraries mailing list<br>
>>>> <a href="mailto:Libraries@haskell.org" target="_blank" rel="noreferrer">Libraries@haskell.org</a><br>
>>>> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
>> _______________________________________________<br>
>> Libraries mailing list<br>
>> <a href="mailto:Libraries@haskell.org" target="_blank" rel="noreferrer">Libraries@haskell.org</a><br>
>> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
> <br>
> _______________________________________________<br>
> Libraries mailing list<br>
> <a href="mailto:Libraries@haskell.org" target="_blank" rel="noreferrer">Libraries@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
<br>
_______________________________________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org" target="_blank" rel="noreferrer">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
</blockquote></div></div></div>
</div></blockquote><blockquote type="cite"><div dir="ltr"><span>_______________________________________________</span><br><span>Libraries mailing list</span><br><span><a href="mailto:Libraries@haskell.org">Libraries@haskell.org</a></span><br><span><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a></span><br></div></blockquote></body></html>