Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-28 Thread Matthew Johnson via swift-evolution
> On Nov 28, 2017, at 4:11 PM, Slava Pestov wrote: > > > >> On Nov 28, 2017, at 1:35 PM, Matthew Johnson > > wrote: >> * the compiler doesn’t have to reason about an overload set which might improve build

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-28 Thread Slava Pestov via swift-evolution
> On Nov 28, 2017, at 1:35 PM, Matthew Johnson wrote: > >>> * the compiler doesn’t have to reason about an overload set which might >>> improve build times, etc >> >> They’re effectively equivalent, because we still have to decide which subset >> of the default

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-28 Thread Matthew Johnson via swift-evolution
> On Nov 28, 2017, at 3:28 PM, Slava Pestov wrote: > > > >> On Nov 28, 2017, at 1:25 PM, Matthew Johnson > > wrote: >> >> >>> On Nov 28, 2017, at 3:18 PM, Slava Pestov >>

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-28 Thread Matthew Johnson via swift-evolution
> On Nov 28, 2017, at 3:18 PM, Slava Pestov wrote: > > > >> On Nov 28, 2017, at 8:44 AM, Matthew Johnson > > wrote: >> >> func makeResource( >> with configuration: Configuration = () where Configuration == Void,

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-28 Thread Slava Pestov via swift-evolution
> On Nov 28, 2017, at 8:44 AM, Matthew Johnson wrote: > > func makeResource( > with configuration: Configuration = () where Configuration == Void, > actionHandler: @escaping (Action) -> Void = { _ in } where Action == Never > ) Similar question to the one I

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-28 Thread Matthew Johnson via swift-evolution
> On Nov 28, 2017, at 11:40 AM, Tony Allevato wrote: > > > > On Tue, Nov 28, 2017 at 9:16 AM Matthew Johnson > wrote: >> On Nov 28, 2017, at 11:01 AM, Tony Allevato >

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-28 Thread Tony Allevato via swift-evolution
On Tue, Nov 28, 2017 at 9:16 AM Matthew Johnson wrote: > On Nov 28, 2017, at 11:01 AM, Tony Allevato > wrote: > > > > On Tue, Nov 28, 2017 at 8:45 AM Matthew Johnson > wrote: > >> On Nov 28, 2017, at 10:06 AM, Tony

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-28 Thread Matthew Johnson via swift-evolution
> On Nov 28, 2017, at 11:01 AM, Tony Allevato wrote: > > > > On Tue, Nov 28, 2017 at 8:45 AM Matthew Johnson > wrote: >> On Nov 28, 2017, at 10:06 AM, Tony Allevato >

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-28 Thread Tony Allevato via swift-evolution
On Tue, Nov 28, 2017 at 8:45 AM Matthew Johnson wrote: > On Nov 28, 2017, at 10:06 AM, Tony Allevato > wrote: > > > > On Mon, Nov 27, 2017 at 10:32 PM Slava Pestov wrote: > >> Hi Tony, >> >> So if my understanding is correct,

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-28 Thread Matthew Johnson via swift-evolution
> On Nov 28, 2017, at 10:06 AM, Tony Allevato wrote: > > > > On Mon, Nov 27, 2017 at 10:32 PM Slava Pestov > wrote: > Hi Tony, > > So if my understanding is correct, the basic proposal is the following: > > func id(t:

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-28 Thread Tony Allevato via swift-evolution
On Mon, Nov 27, 2017 at 10:32 PM Slava Pestov wrote: > Hi Tony, > > So if my understanding is correct, the basic proposal is the following: > > func id(t: T ?= T.defaultValue) { return t } > > extension Int { static var defaultValue = 0 } > > extension String { static var

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-28 Thread Matthew Johnson via swift-evolution
> On Nov 28, 2017, at 12:34 AM, Slava Pestov wrote: > > > >> On Nov 27, 2017, at 3:38 PM, Matthew Johnson via swift-evolution >> > wrote: >> >> You are effectively proposing that in this very narrow case we

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-27 Thread Slava Pestov via swift-evolution
> On Nov 27, 2017, at 3:38 PM, Matthew Johnson via swift-evolution > wrote: > > You are effectively proposing that in this very narrow case we perform > overload resolution on a symbol in a generic type context *after* the generic > type has been replaced with a

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-27 Thread Slava Pestov via swift-evolution
Hi Tony, So if my understanding is correct, the basic proposal is the following: func id(t: T ?= T.defaultValue) { return t } extension Int { static var defaultValue = 0 } extension String { static var defaultValue = “” } id() as Int // returns 0 id() as String // returns “” id() as

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-27 Thread Tony Allevato via swift-evolution
On Mon, Nov 27, 2017 at 3:38 PM Matthew Johnson wrote: > On Nov 27, 2017, at 4:55 PM, Tony Allevato > wrote: > > > > On Mon, Nov 27, 2017 at 2:39 PM Matthew Johnson > wrote: > >> On Nov 27, 2017, at 4:25 PM, Tony Allevato

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-27 Thread Matthew Johnson via swift-evolution
> On Nov 27, 2017, at 4:55 PM, Tony Allevato wrote: > > > > On Mon, Nov 27, 2017 at 2:39 PM Matthew Johnson > wrote: >> On Nov 27, 2017, at 4:25 PM, Tony Allevato >

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-27 Thread Tony Allevato via swift-evolution
On Mon, Nov 27, 2017 at 2:39 PM Matthew Johnson wrote: > On Nov 27, 2017, at 4:25 PM, Tony Allevato > wrote: > > > > On Mon, Nov 27, 2017 at 2:19 PM Matthew Johnson > wrote: > >> On Nov 27, 2017, at 3:56 PM, Howard Lovatt

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-27 Thread Matthew Johnson via swift-evolution
> On Nov 27, 2017, at 4:25 PM, Tony Allevato wrote: > > > > On Mon, Nov 27, 2017 at 2:19 PM Matthew Johnson > wrote: >> On Nov 27, 2017, at 3:56 PM, Howard Lovatt via swift-evolution >>

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-27 Thread Tony Allevato via swift-evolution
On Mon, Nov 27, 2017 at 2:19 PM Matthew Johnson wrote: > On Nov 27, 2017, at 3:56 PM, Howard Lovatt via swift-evolution < > swift-evolution@swift.org> wrote: > > Really like Tony’s suggestion, much cleaner than yet another annotation > rammed into the signature. Also the

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-27 Thread Tony Allevato via swift-evolution
On Mon, Nov 27, 2017 at 2:19 PM Matthew Johnson wrote: > On Nov 27, 2017, at 3:56 PM, Howard Lovatt via swift-evolution < > swift-evolution@swift.org> wrote: > > Really like Tony’s suggestion, much cleaner than yet another annotation > rammed into the signature. Also the

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-27 Thread Matthew Johnson via swift-evolution
> On Nov 27, 2017, at 3:56 PM, Howard Lovatt via swift-evolution > wrote: > > Really like Tony’s suggestion, much cleaner than yet another annotation > rammed into the signature. Also the idea of a static factory that could > accept previously initialized arguments

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-27 Thread Howard Lovatt via swift-evolution
You could even restrict to the same file, like extension access to private. -- Howard. > On 26 Nov 2017, at 9:44 am, Tony Allevato via swift-evolution > wrote: > >> On Sat, Nov 25, 2017 at 2:35 PM Xiaodi Wu wrote: >>> On Sat, Nov 25, 2017 at

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-27 Thread Matthew Johnson via swift-evolution
> On Nov 27, 2017, at 3:27 PM, Tony Allevato wrote: > > On Mon, Nov 27, 2017 at 12:49 PM Matthew Johnson > wrote: >> On Nov 27, 2017, at 1:24 PM, Tony Allevato >

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-27 Thread Howard Lovatt via swift-evolution
Really like Tony’s suggestion, much cleaner than yet another annotation rammed into the signature. Also the idea of a static factory that could accept previously initialized arguments would be very powerful. -- Howard. > On 26 Nov 2017, at 9:25 am, Tony Allevato via swift-evolution >

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-27 Thread Tony Allevato via swift-evolution
On Mon, Nov 27, 2017 at 12:49 PM Matthew Johnson wrote: > On Nov 27, 2017, at 1:24 PM, Tony Allevato > wrote: > > > > On Mon, Nov 27, 2017 at 11:12 AM Matthew Johnson via swift-evolution < > swift-evolution@swift.org> wrote: > >> On Nov 27, 2017,

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-27 Thread Matthew Johnson via swift-evolution
> On Nov 27, 2017, at 1:24 PM, Tony Allevato wrote: > > > > On Mon, Nov 27, 2017 at 11:12 AM Matthew Johnson via swift-evolution > > wrote: >> On Nov 27, 2017, at 12:50 PM, Douglas Gregor

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-27 Thread Matthew Johnson via swift-evolution
> On Nov 27, 2017, at 12:50 PM, Douglas Gregor wrote: > > > >> On Nov 24, 2017, at 3:11 PM, Matthew Johnson via swift-evolution >> > wrote: >> >> As mentioned in my prior message, I currently have a PR open to

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-27 Thread Douglas Gregor via swift-evolution
> On Nov 24, 2017, at 3:11 PM, Matthew Johnson via swift-evolution > wrote: > > As mentioned in my prior message, I currently have a PR open to update the > generics manifesto (https://github.com/apple/swift/pull/13012 >

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-26 Thread Jonathan Hull via swift-evolution
I have wanted something similar to this for a while, and haven’t suggested it for a while for the same reason… I can’t really think of a good syntax. My best idea so far is to put it after the function declaration but before the open brace: func myCrazyFunction(myParam: T)->Int

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-25 Thread Tony Allevato via swift-evolution
Yeah, I realized that wasn’t true after sending it—it could come from an imported module, as long as it’s visible. Still, I imagine that retroactive conformance wouldn’t be an issue because when the compiler type checks the default at the declaration site, it would only see declarations that it

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-25 Thread Xiaodi Wu via swift-evolution
On Sat, Nov 25, 2017 at 4:44 PM, Tony Allevato wrote: > On Sat, Nov 25, 2017 at 2:35 PM Xiaodi Wu wrote: > >> On Sat, Nov 25, 2017 at 4:25 PM, Tony Allevato >> wrote: >> >>> On Sat, Nov 25, 2017 at 1:16 PM Xiaodi Wu

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-25 Thread Dave Abrahams via swift-evolution
This sort of “it compiles if it’s syntactically valid, regardless of declared constraints” thing is deliberately avoided in Swift’s generics design with good reason; it’s possible that in this instance there are no problems, but I’m skeptical. Sent from my iPhone > On Nov 25, 2017, at 1:16

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-25 Thread Tony Allevato via swift-evolution
On Sat, Nov 25, 2017 at 2:35 PM Xiaodi Wu wrote: > On Sat, Nov 25, 2017 at 4:25 PM, Tony Allevato > wrote: > >> On Sat, Nov 25, 2017 at 1:16 PM Xiaodi Wu wrote: >> >>> On Sat, Nov 25, 2017 at 15:06 Matthew Johnson

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-25 Thread Xiaodi Wu via swift-evolution
On Sat, Nov 25, 2017 at 4:25 PM, Tony Allevato wrote: > On Sat, Nov 25, 2017 at 1:16 PM Xiaodi Wu wrote: > >> On Sat, Nov 25, 2017 at 15:06 Matthew Johnson >> wrote: >> >>> On Nov 25, 2017, at 1:28 PM, Tony Allevato via

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-25 Thread Tony Allevato via swift-evolution
On Sat, Nov 25, 2017 at 1:16 PM Xiaodi Wu wrote: > On Sat, Nov 25, 2017 at 15:06 Matthew Johnson > wrote: > >> On Nov 25, 2017, at 1:28 PM, Tony Allevato via swift-evolution < >> swift-evolution@swift.org> wrote: >> >> On Fri, Nov 24, 2017 at 7:18 PM

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-25 Thread Xiaodi Wu via swift-evolution
On Sat, Nov 25, 2017 at 15:06 Matthew Johnson wrote: > On Nov 25, 2017, at 1:28 PM, Tony Allevato via swift-evolution < > swift-evolution@swift.org> wrote: > > On Fri, Nov 24, 2017 at 7:18 PM Xiaodi Wu via swift-evolution < > swift-evolution@swift.org> wrote: > > > It's

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-25 Thread Thorsten Seitz via swift-evolution
I like Tony's idea. Maybe the default argument functions could even take arguments with earlier parameters from the parameter list. -Thorsten > Am 25.11.2017 um 20:28 schrieb Tony Allevato via swift-evolution > : > >> On Fri, Nov 24, 2017 at 7:18 PM Xiaodi Wu via

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-25 Thread Matthew Johnson via swift-evolution
> On Nov 25, 2017, at 1:28 PM, Tony Allevato via swift-evolution > wrote: > > On Fri, Nov 24, 2017 at 7:18 PM Xiaodi Wu via swift-evolution > > wrote: > > > > It's kludgy, but we could have something

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-25 Thread Tony Allevato via swift-evolution
On Fri, Nov 24, 2017 at 7:18 PM Xiaodi Wu via swift-evolution < swift-evolution@swift.org> wrote: It's kludgy, but we could have something like: > > ``` > @defaultArgument(configuration = (), where R.Configuration == Void) > @defaultArgument(actionHandler = { _ in }, where R.Action == Never) >

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-24 Thread Xiaodi Wu via swift-evolution
It's kludgy, but we could have something like: ``` @defaultArgument(configuration = (), where R.Configuration == Void) @defaultArgument(actionHandler = { _ in }, where R.Action == Never) func makeResource(with configuration: R.Configuration, actionHandler: @escaping (R.Action) -> Void) -> R { ...

Re: [swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-24 Thread T.J. Usiyan via swift-evolution
I am all for this. are many types where there is an obvious 'zero' or 'default' value and the ability to express "use that when possible" without an overload is welcome. The best thing that I can think of right now, in terms of syntax, is actually using @overload ``` struct ResourceDescription

[swift-evolution] [Pre-pitch] Conditional default arguments

2017-11-24 Thread Matthew Johnson via swift-evolution
As mentioned in my prior message, I currently have a PR open to update the generics manifesto (https://github.com/apple/swift/pull/13012 ). I removed one topic from that update at Doug Gregor’s request that it be discussed on the list first. The