> On Nov 21, 2017, at 3:05 PM, Slava Pestov <spes...@apple.com> wrote:
> 
> 
> 
>> On Nov 21, 2017, at 6:02 PM, David Hart <da...@hartbit.com 
>> <mailto:da...@hartbit.com>> wrote:
>> 
>> Can somebody explain to me what are 
>>  nominal and structural types and why Optional should really be a structural 
>> type?
> 
> Nominal types are structs, enums, protocols and classes. They have 
> declarations in source and are uniquely identified by their name. Structural 
> types are functions, meta types, protocol compositions, and tuples.
> 
> The distinction is not as clear as you might think because as Chris said, you 
> can imagine tuple being implemented as ‘struct Tuple<T…>’, similarly 
> functions and meta types could also be written as such. It is mostly a 
> syntactic distinction in the language, but it has far-reaching consequences 
> in internal representations, which is why for now it would be tricky to have 
> structural types conform to protocols.

Right. Optionals are a tricky case because we wanted them to be nominal so we 
could write extensions on them and make them conform to protocols, but, they’re 
so integral to the language that they are really treated like a structural type.

        - Doug


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

Reply via email to