[swift-evolution] Add an ifPresent function to Optional

Dmitri Gribenko gribozavr at gmail.com
Mon Mar 14 20:29:06 CDT 2016

On Mon, Mar 14, 2016 at 5:51 PM,  <davesweeris at mac.com> wrote:
> On Mar 14, 2016, at 5:51 PM, Dmitri Gribenko via swift-evolution
> <swift-evolution at swift.org> wrote:
> Optional.map returns an Optional.
> Array.map returns an Array.
> Set.map returns an Array.
> <any other collection>.map returns an Array.
> I can't say that it is not valid to think about an Optional as a tiny
> collection, but as implemented in Swift, .map() does objectively
> behave differently...
> That behavior is, at least partially, because protocols don’t currently
> support this:
> protocol CollectionType {
>     typealias T
>     func map<U>(transform: T->U) -> Self<U> // error: Cannot specialize
> non-generic type 'Self'
> }

This feature is called higher-kinded types, and it is not planned for
design or implementation in the near future.

> I *think* I remember reading on here somewhere that the intent is to change
> map and flatMap to return “Self<U>" pretty much as soon as the language
> supports it.

As a standard library engineer I can with certainty that this is not
the plan.  We like the current formulation of map() that returns an


I don't think that having HKTs in the language would change the rationale.


(j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/

More information about the swift-evolution mailing list