> On Jan 27, 2017, at 1:43 PM, Anton Zhilin via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> Current alternative to default generic arguments is typealias, like 
> basic_string and string in C++:
> 
> struct BasicBigInt<T> { ... }
> typealias BigInt = BasicBigInt<Int64>
> It’s not that ugly. It keeps type inference rules simpler, easier to 
> understand and more explicit.
> As someone noted, current type inference for generic initializers works 
> satisfactory in 99% cases. Is it really worth it to try to cover 99.9% at the 
> cost of complexity of type inference rules?
> 
> On the other hand, in the wild, there may exist types with 3 or even more 
> generic parameters that have sensible default values. [Research needed]
> For such complex cases, I think, it makes sense to add default generic 
> parameters only together with generic parameter labels.
> Also, in such cases, functions on types could often help. And that story is 
> even out of scope of Swift 4 Phase 2.
> 

If we could overload the type's name, I think that’d solve my use-case pretty 
much completely:
protocol Endian {}
class BigEndian : Endian {}
class LittleEndian : Endian {}
class NativeEndian : Endian {}
struct BigInt<Chunk _: Integer, Endian _: Endian> {...} //Made-up syntax for 
indicating the generic parameters’ labels should be the same both internally 
and externally
typealias BigInt<T> = BigInt<Chunk: T, Endian: NativeEndian> where T: Integer
typealias BigInt = BigInt<Int>

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

Reply via email to