[swift-evolution] [Review] SE-0065 A New Model for Collections and Indices
Thorsten Seitz
tseitz42 at icloud.com
Tue Apr 19 03:08:34 CDT 2016
Yup, I just tested on scastie.org, extending my earlier example:
class Coll(val elements: List[Int]) {
case class Index(val value: Int)
def firstIndex: Index = Index(0)
def get(index: Index) = elements(index.value)
def slice(start: Index) = new Slice(start.value)
class Slice(val start: Int) {
def firstIndex: Index = Index(start)
def get(index: Index) = elements(index.value)
}
}
object Main extends App {
val a = new Coll(List(1, 2, 3))
val b = new Coll(List(1, 2, 3))
val i = a.firstIndex
a.get(i)
// b.get(i) // type error
val s = a.slice(a.firstIndex)
s.get(a.firstIndex) // allowed!
val s2 = b.slice(b.firstIndex)
s2.get(b.firstIndex)
// s2.get(a.firstIndex) // type error
val indices: List[a.Index] = List(a.firstIndex)
}
Note the last line declaring a list of indices of collection 'a'.
-Thorsten
> Am 19.04.2016 um 10:01 schrieb Thorsten Seitz via swift-evolution <swift-evolution at swift.org>:
>
>
>
>> Am 18.04.2016 um 23:54 schrieb Dave Abrahams via swift-evolution <swift-evolution at swift.org>:
>>
>>
>> on Sat Apr 16 2016, Thorsten Seitz <swift-evolution at swift.org> wrote:
>>
>>>> Am 15.04.2016 um 23:19 schrieb Dmitri Gribenko via swift-evolution <swift-evolution at swift.org>:
>>>>
>>>>>> On Fri, Apr 15, 2016 at 1:30 PM, Stephan Tolksdorf <st at quanttec.com> wrote:
>>>>>> On 2016-04-12 Dmitri Gribenko via swift-evolution wrote:
>>>
>>>>>> Not even to mention that
>>>>>> indices are valid only in context of a particular collection instance,
>>>>>> so in this model you could validate an index against one collection
>>>>>> and use it with another one.
>>>>>
>>>>>
>>>>> The proposal requires Index values to be Comparable. Does that mean that
>>>>> indices from different collection instances should be comparable i.e. have a
>>>>> strict total order?
>>>>
>>>> No, comparing indices from unrelated instances produces unspecified
>>>> results (incl. traps).
>>>
>>> Path dependent types as used in Scala would allow making this
>>> distinction type safe (see
>>> http://docs.scala-lang.org/tutorials/tour/inner-classes or
>>> http://danielwestheide.com/blog/2013/02/13/the-neophytes-guide-to-scala-part-13-path-dependent-types.html)
>>> by allowing the index type to be rooted at the instance.
>>
>> Wouldn't that also rule out useful designs, as in those where indices
>> into one collection are stored in another?
>
> This should still be possible:
>
> val a: Collection<T> = ...
> val indices: List<a.Index> = ...
>
> As 'a.Index' is just a normal type it should be possible to declare a collection containing elements of just that type (I haven't tried it out, yet, though, as I currently have no access to a development machine).
>
> -Thorsten
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160419/7d98698b/attachment-0001.html>
More information about the swift-evolution
mailing list