> On 24 Jan 2017, at 01:13, Jonathan Hull via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> Have we considered allowing a struct/class/enum to have the same name as a 
> protocol as long as it conforms to the protocol?  Type declarations would 
> have to always mean the protocol (which includes the concrete type as well).  
> Static functions would always apply to the concrete type.
> 
> Seems like a good way to support having a default implementation of a 
> protocol.  I am always running into the awkward naming issues around this...
> 
>       protocol X {
>               //yada yada
>       }
> 
>       struct X { //Implicitly adheres to protocol X (because it must)
>               init(){…}
>       }
> 
>       let myVar:X //This refers to the protocol
>       let otherVar = X() //This makes the struct
> 
> If we do need to be able to spell the concrete type for other uses, we could 
> probably do something like: ‘concrete(X)’ which isn’t pretty, but is there 
> for the rare times it is needed for utility.  I can’t think of any reason 
> except making an array of the concrete type.
> 
> I am guessing there is a subtle technical reason this won’t work, but I 
> wanted to mention it now just in case it is possible.  Seems like it could 
> have a large (simplifying) effect on the namespace of the standard library.
> 
> Thanks,
> Jon
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution


IMO, the way to do this is by nesting the struct inside the protocol (not 
possible yet). For example, the standard library contains EmptyCollection and 
CollectionOfOne. I think the way to express such things would be as: 
Collection.Empty<T> and Collection.One<T>.

Not promising anything about the stdlib interface itself, but in general I 
think these kind of canned conformances are ideal candidates for nesting. So in 
your case you might have X.Default (or something more meaningful).

- Karl
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to