[swift-evolution] Pitch: Allow generic functions to fulfill non-generic protocol requirements

David Sweeris davesweeris at mac.com
Wed May 24 21:11:48 CDT 2017

> On May 24, 2017, at 5:52 PM, Xiaodi Wu <xiaodi.wu at gmail.com> wrote:
> On Wed, May 24, 2017 at 7:21 PM, David Sweeris <davesweeris at mac.com <mailto:davesweeris at mac.com>> wrote:
>> On May 24, 2017, at 5:11 PM, Xiaodi Wu <xiaodi.wu at gmail.com <mailto:xiaodi.wu at gmail.com>> wrote:
>> On Wed, May 24, 2017 at 3:32 PM, David Sweeris via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>> So, I’m working on a type, and would like to make it conform to `ExpressibleByArrayLiteral`. The thing is, I don’t actually care what type `Element` is as long as it conforms to `FixedWidthInteger` and `UnsignedInteger`. I tried writing this:
>>   public init <U: FixedWidthInteger & UnsignedInteger> (arrayLiteral elements: U...) { … }
>> But Xcode says my type doesn’t conform to `ExpressibleByArrayLiteral` unless I add an init that takes a concrete type:
>>   public init(arrayLiteral elements: UInt...) { … }
>> Does anyone else think the generic init should to be able to satisfy `ExpressibleByArrayLiteral` (especially since `UInt` meets the conformance requirements)?
>> Your type needs to be generic.
> It already is… I just don’t want to restrict it to being initialized from array literals containing that same generic type.
> Not sure of your particular use case, but it sounds like you'd want to write a type-erased AnyFixedWidthUnsignedInteger wrapper.

It’s just a arbitrary-width integer type. It's generic over a “chunk” type: UIntArb<UInt8>, UIntArb<UInt32>, etc. I was just wanting to be able initialize the chunk array using an array literal containing any FixedWidthInteger & UnsignedInteger type is all. I’ll look into the type-erased wrapper thing, but I doubt it’ll be worth the effort since it was just a minor convenience issue for me in the first place.

- Dave Sweeris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170524/87910838/attachment.html>

More information about the swift-evolution mailing list