I don't want to drag out bikeshedding either. But I *do* want to point out that mono-traversable also includes a function unsafeHead, separate from headEx. While headEx guarantees that it will throw an exception in the case of an empty Foldable, unsafeHead may crash your program. This is the same kind of distinction as vector and bytestring make between head and unsafeHead.


On Sun, Feb 9, 2014 at 6:41 PM, Antoine Latter <aslatter@gmail.com> wrote:
Not that it matters, but I think I prefer the "Unsafe" suffix. I'm not calling this version of "head" because I *want* an exception - I'm calling it because I want "Unsafe" (non-typechecked) behavior - I'm asserting that I've already validated some preconditions that aren't reflected in the type.

But on the other hand I've always found functions like "fromMaybe" easier to work with than functions like "fromJust".

Enough bikeshedding! If it works in your packages that's fine, and these are the sort of functions I have no complaints about reimplementing on my own.


On Sat, Feb 8, 2014 at 11:25 PM, Michael Snoyman <michael@snoyman.com> wrote:
It means "throws an exception."


On Sun, Feb 9, 2014 at 5:04 AM, Antoine Latter <aslatter@gmail.com> wrote:
What does "Ex" mean?


On Thu, Feb 6, 2014 at 8:59 PM, Michael Snoyman <michael@snoyman.com> wrote:
Thanks for the input. We ended up going with an `Ex` suffix, e.g. headEx, lastEx.


On Fri, Feb 7, 2014 at 4:53 AM, Tikhon Jelvis <tikhon@jelv.is> wrote:
For what it's worth, OCaml's Core library does this with _exn, so they would call a partial last "last_exn". I would actually prefer an abbreviation of some sort (like exn) as long as it's a consistent convention. Using a full word like "exception" or "partial" adds to much noise in my opinion, especially if the base name (like "last") is shorter than the suffix!

Also, I think a suffix would be better than a prefix, if only to group things conveniently when sorted alphabetically.


On Thu, Jan 30, 2014 at 9:36 AM, Atze van der Ploeg <atzeus@gmail.com> wrote:

unprovenLast ?

On Jan 30, 2014 6:33 PM, "Michael Snoyman" <michael@snoyman.com> wrote:
Greg Weber and I have been discussing some changes to mono-traversable[1]. One of the modules we provide is Data.NonNull, which provides total versions of functions like `last`. A change we're looking at would require having a partial version of `last` defined in a separate typeclass (IsSequence), which would allowing for more optimized implementations of the total `last` function for datatypes which support it (e.g., strict ByteStrings).

But what should we name it? I'm sure everyone's familiar with the `unsafe` naming convention, but that's not appropriate here: standard usage shows `unsafe` meaning a function which can cause a segfault.

I initially named it `partialLast`, but partial can also imply partial function application. Greg brought up the idea of suffixing the function with something like `Throws` or `Errors`, which I think I'm a bit partial to myself[2].

So my questions are:

* Is there some already used naming scheme out there for partial functions which I've missed?
* Do people have any ideas to throw into the mix?

[2] Pardon the pun.

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe




_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe