<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Nov 7, 2010, at 6:16 PM, wren ng thornton wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>On 11/7/10 12:51 PM, Edward Kmett wrote:<br><blockquote type="cite">On Sun, Nov 7, 2010 at 11:56 AM, Malcolm Wallace&lt;<a href="mailto:malcolm.wallace@me.com">malcolm.wallace@me.com</a>&gt;wrote:<br></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"> &nbsp;Option 3<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">--------<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">breakStr :: Text &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt; &nbsp;Text -&gt; &nbsp;(Text, Text)<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">breakChr :: (Char -&gt; &nbsp;Bool) -&gt; &nbsp;Text -&gt; &nbsp;(Text, Text)<br></blockquote></blockquote></blockquote><font class="Apple-style-span" color="#540000"><br></font>But also -1 for the random abbreviation. At the very least *Chr should be *Char. Making an abbreviation for a single character is unnecessary, unhelpful, and confusing. For *Str, at least the abbreviation has a meaningful effect in shortening things, but given that we're talking about Text and not String, why not go for *Text which is short, unabbreviated, and matches the type in question.</div></blockquote><br></div><div>I would vote for breakText over breakStr because this is a useful variant:</div><div><span class="Apple-style-span" style="color: rgb(84, 0, 0); "><br></span></div><div>&gt;&nbsp;<span class="Apple-style-span" style="color: rgb(84, 0, 0); ">breakStr :: String &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-&gt; &nbsp;Text -&gt; &nbsp;(Text, Text)</span></div><div><br></div><div>I generally do not use OverloadedStrings and might define that locally to avoid having to call Text.pack a lot.</div><div><br></div><div>Also, if breakText has the type</div><div><span class="Apple-style-span" style="color: rgb(84, 0, 0); "><br></span></div><div>&gt; breakText&nbsp;<span class="Apple-style-span" style="color: rgb(84, 0, 0); ">:: Text &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt; &nbsp;Text -&gt; &nbsp;(Text, Text)</span></div><div><br></div><div>Then I would probably expect breakChar to have the type:</div><div><br></div><div>&gt; breakChar&nbsp;<span class="Apple-style-span" style="color: rgb(84, 0, 0); ">:: Char &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-&gt; &nbsp;Text -&gt; &nbsp;(Text, Text)</span></div><div><br></div><div>So I don't think that naming is really all that consistent.&nbsp;</div><div><br></div><div>If Data.List was not in the picture, option 1 certainly seems quite sensible.</div><div><br></div><div>With Data.List in the picture, option 1 is not going to result in bugs in your code, because the type checker will figure out that you are doing it wrong. So, the only downside of option 1, IMO, &nbsp;is that you have to remember that Data.Text has a different meaning for break than Data.List. &nbsp;Or put differently, you are going to have to look at the documentation to figure out what you want. But with option 3, you have to look at the documentation as well, because the names it uses do not come from Data.List either. So the gain is not really that significant.</div><div><br></div><div>So I vote +0 on option 3. But if it is option 3, I think I would rather see:</div><div><br></div><div>&gt; breakText :: Text -&gt; Text -&gt; (Text, Text)</div><div>&gt; breakBy :: (Char -&gt; Bool) -&gt; Text -&gt; (Text, Text)</div><div><br></div><div>I would also like to vote -100 for:</div><div><br></div><div>Option 4</div><div>------------</div><div><br></div><div>class Break a where</div><div>&nbsp;&nbsp; break :: a -&gt; Text -&gt; (Text, Text)</div><div><br></div><div>instance Break Text where</div><div>&nbsp;&nbsp; break = breakStr</div><div><br></div><div>instance Break (Char -&gt; Bool) where</div><div>&nbsp;&nbsp;break = breakChar</div><div><br></div><div>Though it does have its charm..</div><div><br></div><div>- jeremy</div></body></html>