<div dir="ltr">Semicomonad<div>Semibifoldable<br><div>Semibitraversable</div></div><div><br></div><div>There is discussion about whether to rename some or all of the combinators to a semi- prefix.</div><div><br></div><div>There is also a longstanding discussion about what to do for the API surface of Semifoldable, etc. Can it stay with the simplistic model it has now or does it need elaboration like the Foldable API did. If I'm going to ask users to make a major version bump, I'd like to resolve this question at the same time to minimize thrashing and rework.</div><div><br></div><div>I'd like to get all of those things resolved in semigroupoids before it gets folded into base. Because once it is in base, that is a hell of a lot harder to deal with.</div><div><br></div><div>Fixing things in a third-party package with a long support window, people can just bump the bounds on their semigroupoids dependency.</div><div><br></div><div>Fixing them later on in base in a way that requires CPP to bridge the gap? You now lock users into CPP and into dealing with both sets of names until the old version of base drops out of whatever their arbitrarily long support window happens to be. This basically locks us into the API as that price is too high to ask someone to pay for mere administrative cleanup.</div><div><br></div><div>All of this indicates to me that it is generally best not refactor and merge things into a much more stable upstream library in a single step. Mistakes in that step then become <i>much</i> more costly.</div><div><br></div><div>-Edward</div></div><br><div class="gmail_quote"><div dir="ltr">On Fri, Jun 8, 2018 at 2:59 AM Tony Morris <<a href="mailto:tmorris@tmorris.net">tmorris@tmorris.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>* Foldable1 -> Semifoldable<br></div>* Bind -> Semimonad<br></div><div>* Apply -> Semiapplicative</div><div><br></div><div>What other changes are required?<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 8, 2018 at 5:20 AM, Edward Kmett <span dir="ltr"><<a href="mailto:ekmett@gmail.com" target="_blank">ekmett@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto">I’m generally on board with doing this proposal, but on a pretty slow time table. Why? There is an active change I want to make to the API of semigroupoids that will require a major version bump and would affect the API for Foldable1 among other classes in the library.<div><br></div><div>The change is more or less the move to calling it Semifoldable, and refactoring Bind and Apply into Semimonad and Semiapplicative to enable users to find prior literature on the ideas behind them.</div><div><br></div><div>This will require a major version bump on the semigroupoids package and I’d like to see the dust settle on that before we proceed with anything that as it involves over 100 downstream dependencies having to move. Fortunately I wrote about half of them. Unfortunately, I’m doing a lot of travel for the next couple of months so it may be a bit of a community effort to get everything patched over once we decide to pull the trigger.</div><div><br></div><div>I prefer to make big API changes far outside of base. They are much more expensive to make after things merge in.</div><div><span class="m_-6967469152529972919HOEnZb"><font color="#888888"><br><div>-Edward</div></font></span><div><div class="m_-6967469152529972919h5"><div><br>On Jun 7, 2018, at 9:12 PM, Daniel Cartwright <<a href="mailto:chessai1996@gmail.com" target="_blank">chessai1996@gmail.com</a>> wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr">For those of you unfamiliar with 'Foldable1', it is a typeclass for nonempty foldable structures, that centres around Semigroup instead of Monoid.<div>I have made a differential on Phabricator for the change here: <a href="https://phabricator.haskell.org/D4812" target="_blank">https://phabricator.haskell.org/D4812</a></div><div><br></div><div>Some discussion at the following links also:</div><div><br></div><div><p style="margin:0px 0px 12px;padding:0px;border:0px;color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;text-align:left;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><a href="https://ghc.haskell.org/trac/ghc/ticket/13573" class="m_-6967469152529972919m_4777053752293309772gmail-remarkup-link" rel="noreferrer" style="text-decoration:none;color:rgb(19,108,178);margin-top:0px" target="_blank">https://ghc.haskell.org/trac/ghc/ticket/13573</a></p><p style="margin:0px 0px 12px;padding:0px;border:0px;color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;text-align:left;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><a href="https://www.reddit.com/r/haskell/comments/8p531d/ann_safefoldable_safe_wrappers_for_nullpartial/" class="m_-6967469152529972919m_4777053752293309772gmail-remarkup-link" rel="noreferrer" style="text-decoration:none;color:rgb(19,108,178);margin-top:0px" target="_blank">https://www.reddit.com/r/haskell/comments/8p531d/ann_safefoldable_safe_wrappers_for_nullpartial/</a></p><p style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0);font-family:"Segoe UI","Segoe UI Emoji","Segoe UI Symbol",Lato,"Helvetica Neue",Helvetica,Arial,sans-serif;text-align:left;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial"><a href="https://github.com/ekmett/semigroupoids/issues/49" class="m_-6967469152529972919m_4777053752293309772gmail-remarkup-link" rel="noreferrer" style="text-decoration:none;color:rgb(19,108,178);margin-top:0px" target="_blank">https://github.com/ekmett/semigroupoids/issues/49</a></p><br></div><div>Note: foldl1 and foldr1 are currently typeclass methods of 'Foldable' and not 'Foldable1', and even though I think they should be, they probably (and shouldn't) be removed in this change, though I hope that eventually they can be moved to Foldable1.</div><div><br></div><div>Foldable1 is also unfortunately named due to the suffix '1' being connotated with the conventions surrounded Data.Functor.Classes (Show1, Eq1, etc.). If this naming is seen as sufficiently unfortunate/confusing because of that, then perhaps the name should be changed to something like 'SemiFoldable'. The name change would most likely have to be made in 'semigroupoids' first if that is the case.</div></div>
</div></blockquote></div></div><blockquote type="cite"><div><span>_______________________________________________</span><span><br><span>Libraries mailing list</span><br><span><a href="mailto:Libraries@haskell.org" target="_blank">Libraries@haskell.org</a></span><br><span><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a></span><br></span></div></blockquote></div></div><br>_______________________________________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org" target="_blank">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-bin/mailman/listinfo/libraries</a><br>
<br></blockquote></div><br></div>
</blockquote></div>