Why doesn't Collection's SubSequence conform to Collection?

The following comment accompanies the declaration of the SubSequence associated type in the Collection protocol:

/// A sequence that represents a contiguous subrange of the collection's
/// elements.
///
/// This associated type appears as a requirement in the `Sequence`
/// protocol, but it is restated here with stricter constraints. In a
/// collection, the subsequence should also conform to `Collection`.
associatedtype SubSequence : IndexableBase, Sequence = Slice<Self>

The comments clearly state that the subsequence should conform to Collection, however, it is not declared as such. Why is this?

Charles

Because it would be recursive. which is not supported, I believe.

protocol Foo {
    associatedtype Bar : Foo
}

Playground execution failed: error: MyPlayground.playground:2:20: error: type may not reference itself as a requirement
    associatedtype Bar : Foo
                   ^

···

On Feb 13, 2017, at 1:42 PM, Charles Srstka via swift-evolution <swift-evolution@swift.org> wrote:

The following comment accompanies the declaration of the SubSequence associated type in the Collection protocol:

/// A sequence that represents a contiguous subrange of the collection's
/// elements.
///
/// This associated type appears as a requirement in the `Sequence`
/// protocol, but it is restated here with stricter constraints. In a
/// collection, the subsequence should also conform to `Collection`.
associatedtype SubSequence : IndexableBase, Sequence = Slice<Self>

The comments clearly state that the subsequence should conform to Collection, however, it is not declared as such. Why is this?

Charles

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

The lines just after the current declaration show the desired version, which is waiting on two generics features that are in the pipeline:

  // FIXME(ABI)#98 (Recursive Protocol Constraints):
  // FIXME(ABI)#99 (Associated Types with where clauses):
  // associatedtype SubSequence : Collection
  // where
  // Iterator.Element == SubSequence.Iterator.Element,
  // SubSequence.Index == Index,
  // SubSequence.Indices == Indices,
  // SubSequence.SubSequence == SubSequence
  //
  // (<rdar://problem/20715009 <rdar://problem/20715009>> Implement recursive protocol
  // constraints)
  //
  // These constraints allow processing collections in generic code by
  // repeatedly slicing them in a loop.

Huon

···

On Feb 13, 2017, at 13:42, Charles Srstka via swift-evolution <swift-evolution@swift.org> wrote:

The following comment accompanies the declaration of the SubSequence associated type in the Collection protocol:

/// A sequence that represents a contiguous subrange of the collection's
/// elements.
///
/// This associated type appears as a requirement in the `Sequence`
/// protocol, but it is restated here with stricter constraints. In a
/// collection, the subsequence should also conform to `Collection`.
associatedtype SubSequence : IndexableBase, Sequence = Slice<Self>

The comments clearly state that the subsequence should conform to Collection, however, it is not declared as such. Why is this?

Charles

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

The compiler doesn’t support “recursive” constraints. We’re working on it

  Implementing Recursive Protocol Constraints · GitHub

  - Doug

···

On Feb 13, 2017, at 1:42 PM, Charles Srstka via swift-evolution <swift-evolution@swift.org> wrote:

The following comment accompanies the declaration of the SubSequence associated type in the Collection protocol:

/// A sequence that represents a contiguous subrange of the collection's
/// elements.
///
/// This associated type appears as a requirement in the `Sequence`
/// protocol, but it is restated here with stricter constraints. In a
/// collection, the subsequence should also conform to `Collection`.
associatedtype SubSequence : IndexableBase, Sequence = Slice<Self>

The comments clearly state that the subsequence should conform to Collection, however, it is not declared as such. Why is this?

What's the status of Recursive protocol constraints? it's a feature that
will help the design of a library I'm working on.
How can I help ?

···

On Tue, Feb 14, 2017 at 1:32 AM Douglas Gregor via swift-evolution < swift-evolution@swift.org> wrote:

On Feb 13, 2017, at 1:42 PM, Charles Srstka via swift-evolution < > swift-evolution@swift.org> wrote:

The following comment accompanies the declaration of the SubSequence
associated type in the Collection protocol:

/// A sequence that represents a contiguous subrange of the collection's
/// elements.
///
/// This associated type appears as a requirement in the `Sequence`
/// protocol, but it is restated here with stricter constraints. In a
/// collection, the subsequence should also conform to `Collection`.
associatedtype SubSequence : IndexableBase, Sequence = Slice<Self>

The comments clearly state that the subsequence should conform to
Collection, however, it is not declared as such. Why is this?

The compiler doesn’t support “recursive” constraints. We’re working on it

Implementing Recursive Protocol Constraints · GitHub

- Doug

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

What's the status of Recursive protocol constraints? it's a feature that will help the design of a library I'm working on.

It’s a surprisingly intricate feature that’s required some major refactoring in the compiler (for the better).

How can I help ?

The review of this proposal (SE-0157) is active now, so feel free to weigh in if you haven’t already.

  - Doug

···

On Feb 24, 2017, at 7:49 AM, Davide Mendolia <davide@gokarumi.com> wrote:

On Tue, Feb 14, 2017 at 1:32 AM Douglas Gregor via swift-evolution <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:

On Feb 13, 2017, at 1:42 PM, Charles Srstka via swift-evolution <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:

The following comment accompanies the declaration of the SubSequence associated type in the Collection protocol:

/// A sequence that represents a contiguous subrange of the collection's
/// elements.
///
/// This associated type appears as a requirement in the `Sequence`
/// protocol, but it is restated here with stricter constraints. In a
/// collection, the subsequence should also conform to `Collection`.
associatedtype SubSequence : IndexableBase, Sequence = Slice<Self>

The comments clearly state that the subsequence should conform to Collection, however, it is not declared as such. Why is this?

The compiler doesn’t support “recursive” constraints. We’re working on it

  Implementing Recursive Protocol Constraints · GitHub

  - Doug

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