[swift-evolution] [Accepted with modifications] SE-0045: Add scan, prefix(while:), drop(while:), and unfold to the stdlib

Erica Sadun erica at ericasadun.com
Fri May 6 20:00:19 CDT 2016

On May 6, 2016, at 6:27 PM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
> on Thu May 05 2016, Erica Sadun <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>> On May 4, 2016, at 5:50 PM, Chris Lattner via swift-evolution
>> <swift-evolution at swift.org> wrote:
>>    Proposal link:
>>    https://github.com/apple/swift-evolution/blob/master/proposals/0045-scan-takewhile-dropwhile.md
>>    Sequence.prefix(while:) & Sequence.drop(while:) - These are *accepted* as
>>    specified in revision 3 of the proposal.
>> I'm still a little sad we didn't go for `prefix`/`suffix` or `take`/`drop` pairs
>> that linguistically matched.
> I think building an API family around “prefix” and “suffix” that covers
> this and other functionality is a great idea, and would make a great
> proposal**
> This whole area needs some design love.  Among other things,
>     s.prefix(4)
> should be
>     s.prefix(ofMaxLength: 4)
> ** though we haven't been able to completely eliminate the moral
> equivalent of “drop” from the “dropWhile” function, whatever it's
> eventually called, in any of our experiments

I'm sure that Kevin or I or some other proposalista could put together a quick fast-track rename request for

* suffix(n) -> Self.SubSequence // requires `n >= 0`, `n <= count`
* suffix(maxLength: n) -> Self.SubSequence // requires `n >= 0`
* suffix(while: predicate) -> Self.SubSequence
* prefix(n) -> Self.SubSequence
* prefix(maxLength: n) -> Self.SubSequence
* prefix(while: predicate) -> Self.SubSequence

> Nonetheless I'm gratified these are hopping into the language. That
>> said, I'm going to put on my painters cap to consider selecting some
>> exterior latex for the feature I was most looking forward to in this
>> proposal:
>> Core team writes:
>>    unfold(_:applying:) - This addition is *rejected* by the core team as
>>    written, but deserves more discussion in the community, and potentially
>>    could be the subject of a future proposal. The core team felt that the
>>    utility of this operation is high enough to be worth including in the
>>    standard library, but could not find an acceptable name for it. “unfold” is
>>    problematic, despite its precedence in other language, because Swift calls
>>    the corresponding operation “reduce” and not “fold”. No one could get
>>    excited about “unreduce”. “iterate” was also considered, but a noun is more
>>    appropriate than an verb in this case. Given the lack of a good name, the
>>    core team preferred to reject to let the community discuss it more.
>> A few thoughts:
>> * I'm not sure why a noun is more appropriate than a verb. Reduce isn't a noun,
>> prefix isn't a noun, drop isn't a noun. 
> Can't let that one go by; prefix is definitely a noun :-)

I knew you'd point that out. It's not a noun when it's wearing its "I AM VERBING" t-shirt.

That aside, the prevailing sentiment is to rename reduce to `fold` and partner it with `unfold`.
(I personally prefer Chris's `sequence` because I think it better reflects how more Swift users will
use it (never for;;get; never sur;;render). But I recognize that terms of art have a strength of
momentum and familiarity.)

-- E

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160506/88b85091/attachment.html>

More information about the swift-evolution mailing list