<div dir="ltr"><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Jul 18, 2014 at 1:07 PM, Henning Thielemann <span dir="ltr"><<a href="mailto:schlepptop@henning-thielemann.de" target="_blank">schlepptop@henning-thielemann.de</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Am 18.07.2014 21:57, schrieb Greg Weber:<div class=""><br>


<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
I think the `By` functions that expect a Bool are all cumbersome because<br>
they are too flexible. 100% of the time I personally use these functions<br>
I want to use Ord or Eq.<br>
What I would like to see is a function groupOn next to groupBy.<br>
<br>
groupOn :: Eq b => (a -> b) -> [a] -> [[a]]<br>
<br>
Then equating is no longer needed, and one just writes: groupOn snd<br>
I believe this style also gives better opportunity for optimization<br>
(Scwartzian transform).<br>
</blockquote>
<br></div>
It's also in my utility package:<br>
<br>
<a href="http://hackage.haskell.org/package/utility-ht-0.0.10/docs/Data-List-Key.html" target="_blank">http://hackage.haskell.org/<u></u>package/utility-ht-0.0.10/<u></u>docs/Data-List-Key.html</a><br>
<br>
I have also a version of 'groupBy' that returns a list of non-empty lists:<br>
<br>
<a href="http://hackage.haskell.org/package/non-empty-0.2/docs/Data-NonEmpty-Mixed.html#v:groupBy" target="_blank">http://hackage.haskell.org/<u></u>package/non-empty-0.2/docs/<u></u>Data-NonEmpty-Mixed.html#v:<u></u>groupBy</a><br>


<br></blockquote><div><br></div><div>non-empty looks nice! semigroups has groupBy1 now that returns NonEmpty</div><div><a href="http://hackage.haskell.org/package/semigroups-0.15.1/docs/Data-List-NonEmpty.html#v:groupBy1">http://hackage.haskell.org/package/semigroups-0.15.1/docs/Data-List-NonEmpty.html#v:groupBy1</a> </div>

<div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
It's all Haskell 98.<br>
<br>
</blockquote></div><br></div><div class="gmail_extra">You should add mono-traversable (Data.MinLen) [1] to your compariisons. It should be a lot more efficient when tracking length beyond 1 element, but it is definitely not Haskell 98.</div>

<div class="gmail_extra"><br></div><div class="gmail_extra">[1] <a href="http://hackage.haskell.org/package/mono-traversable-0.6.0.4/docs/Data-MinLen.html">http://hackage.haskell.org/package/mono-traversable-0.6.0.4/docs/Data-MinLen.html</a></div>

</div>