On Mon, Mar 14, 2016 at 5:51 PM, <[email protected]> wrote: > > On Mar 14, 2016, at 5:51 PM, Dmitri Gribenko via swift-evolution > <[email protected]> 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 Array. https://github.com/apple/swift/blob/master/docs/StdlibRationales.rst#high-order-functions-on-collections-return-arrays I don't think that having HKTs in the language would change the rationale. Dmitri -- main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if (j){printf("%d\n",i);}}} /*Dmitri Gribenko <[email protected]>*/ _______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
