> Am 23.11.2017 um 01:50 schrieb David Sweeris via swift-evolution > <swift-evolution@swift.org>: > > > On Nov 21, 2017, at 22:54, Douglas Gregor via swift-evolution > <swift-evolution@swift.org> wrote: > >>> On Nov 21, 2017, at 10:48 PM, David Hart <da...@hartbit.com> wrote: >>> >>> >>> >>>> On 22 Nov 2017, at 07:41, Douglas Gregor via swift-evolution >>>> <swift-evolution@swift.org> wrote: >>>> >>>> >>>> >>>>> On Nov 21, 2017, at 10:37 PM, Chris Lattner <clatt...@nondot.org> wrote: >>>>> >>>>> On Nov 21, 2017, at 9:25 PM, Douglas Gregor <dgre...@apple.com> wrote: >>>>>>> Or alternatively, one could decide to make the generics system *only >>>>>>> and forever* work on nominal types, and make the syntactic sugar just >>>>>>> be sugar for named types like Swift.Tuple, Function, and Optional. >>>>>>> Either design could work. >>>>>> >>>>>> We don’t have a way to make it work for function types, though, because >>>>>> of parameter-passing conventions. Well, assuming we don’t invent >>>>>> something that allows: >>>>>> >>>>>> Function<Double, inout String> >>>>>> >>>>>> to exist in the type system. Tuple labels have a similar problem. >>>>> >>>>> I’m totally aware of that and mentioned it upthread. >>>> >>>> Eh, sorry I missed it. >>>> >>>>> There are various encoding tricks that could make this work depending on >>>>> how you want to stretch the current generics system… >>>> >>>> I think it’s straightforward and less ugly to make structural types allow >>>> extensions and protocol conformances. >>> >>> Can somebody explain to me what is less ugly about that? I would have >>> naturally thought that the language would be simpler as a whole if there >>> only existed nominal types and all structural types were just sugar over >>> them. >> >> See Thorsten’s response with, e.g., >> >> Function<Double, InoutParam<String>, Param<Int>> >> >> which handles “inout” by adding wrappers around the parameter types (which >> one would have to cope with in any user of Function), but still doesn’t >> handle argument labels. To handle argument labels, we would need something >> like strings as generic arguments. > > Oh, good! A use case for “literals as generic parameters” other than Vectors > and Fixed-Size Arrays!
Do not forget the use case of typed units (e.g. 9.81 m/s^2) which was discussed long ago on this list where integers as generic parameters would store the exponent of each base unit. -Thorsten
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution