<div dir="ltr">It is worth noting that first and second from Data.Bifunctor were named to serve as an argument that in general it is seems useful to abstract over the bifunctor than the arrow type, in an attempt to help lead people away from Control.Arrow. <span style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:small;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">My experience and the data I had at the time based on data mining hackage was that most of the code that was importing Control.Arrow, was importing it to work with just the (->) instane, and to get a couple of combinators like first and second. </span>The clash was a rather deliberate choice. <div><br></div><div>Data.Profunctor, which offered yet a third color for the bikeshed actually deliberately moving "out of the way" of the names taken by Data.Bifunctor and Control.Arrow and I've pretty much regretted the ' s in the names ever since.<div><br></div><div>So I'm not terribly inclined to rename the combinators that live in each one of the classes.</div><div><br></div><div>On the other hand, exporting redundant alternatively named aliases from the module would then introduce yet another name for people to get hung up on, and if it has exactly the same type signature they'd have to then know which one was in the class and which one is not. This is rather annoying and hard to keep track of information. But it is worth noting that '<font face="monospace, monospace">import ... as ...</font>' doesnt required the use of qualified, so with</div><div><br></div><div>import Control.Arrow as A</div><div>import Data.Bifunctor as B</div><div><br></div><div>now you can use almost all the combinators and operators from Control.Arrow except first and second unqualified _and_ almost all the combinators from Data.Bifunctor unqualified, but need to refer to A.first or B.first and A.second or B.second due to the clash. This can be locally disambiguated by users with no additional information about what has been added in some bleeding edge version of Data.Bifunctor.</div><div><br></div><div>We have qualified imports for covering this scenario. Globally unique names are generally going to be impossible to maintain, and additional redundant aliases come with additional cognitive overhead to remember that they exist, and which one is the redefinable one that lives in the class, so this request doesn't come 'for free'.</div><div><br></div><div>-Edward</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 9, 2018 at 2:34 AM, 박신환 <span dir="ltr"><<a href="mailto:ndospark320@naver.com" target="_blank">ndospark320@naver.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-size:10pt;font-family:Gulim,sans-serif"><p>It still seems worthy to add the aliases for Data.Bifunctor.first and Data.Bifunctor.second. Hence:</p><p> </p><p>import Control.Arrow</p><p>import Data.Bifunctor hiding (first, second)</p><p> </p><p>and we don't need to have the methods qualified. </p><span class=""><p> </p><p style="font-size:10pt;font-family:sans-serif;padding:0 0 0 10pt"><span>-----Original Message-----</span><br><b>From:</b> "Eric Mertens"<<a href="mailto:emertens@gmail.com" target="_blank">emertens@gmail.com</a>> <br><b>To:</b> "Alexandre Rodrigues"<<a href="mailto:alexandrer_b@outlook.com" target="_blank">alexandrer_b@<wbr>outlook.com</a>>; <br><b>Cc:</b> "박신환"<<a href="mailto:ndospark320@naver.com" target="_blank">ndospark320@naver.com</a>>; "Haskell Libraries"<<a href="mailto:libraries@haskell.org" target="_blank">libraries@haskell.<wbr>org</a>>; <br><b>Sent:</b> 2018-05-09 (수) 01:04:12<br><b>Subject:</b> Re: Resolve name collsion of `first` and `second` by Control.Arrow and Data.Bifunctor<br> </p><div dir="ltr">I'm opposed to changing the names in either module. In modern code it should be fairly rare to import Control.Arrow. In the cases that both are needed qualified imports are available, and it wouldn't be worth breaking existing code by renaming the class methods of Bifunctor.</div></span></div></div><table style="display:none"><tbody><tr><td><img src="https://mail.naver.com/readReceipt/notify/?img=JQ%2BCbHFTpz%2FYaqgZKrRZM6UlazkCFxJSpApCFrKZaAISKxUwFqp4FotdKxvZauIo%2BrkSKot5W4d5W4C5bX0q%2BzkR74FTWx%2FsWz0Sb4JZ16kqtzCCbrR0Wzm5WXiN.gif" border="0"></td></tr></tbody></table><br>______________________________<wbr>_________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/libraries</a><br>
<br></blockquote></div><br></div>