11package scala
22import reflect .ClassTag
33
4+ import language .experimental .captureChecking
5+
46import scala .collection .{LazyZip2 , SeqView , Searching , Stepper , StepperShape }
57import scala .collection .immutable .ArraySeq
68import scala .collection .mutable .{ArrayBuilder , Builder }
@@ -92,12 +94,12 @@ object IArray:
9294
9395 /** Builds a new array by applying a function to all elements of this array
9496 * and using the elements of the resulting collections. */
95- extension [T ](arr : IArray [T ]) def flatMap [U : ClassTag ](f : T => IterableOnce [U ]): IArray [U ] =
97+ extension [T ](arr : IArray [T ]) def flatMap [U : ClassTag ](f : T => IterableOnce [U ]^ ): IArray [U ] =
9698 genericArrayOps(arr).flatMap(f)
9799
98100 /** Flattens a two-dimensional array by concatenating all its rows
99101 * into a single array. */
100- extension [T ](arr : IArray [T ]) def flatten [U ](using asIterable : T => Iterable [U ], ct : ClassTag [U ]): IArray [U ] =
102+ extension [T ](arr : IArray [T ]) def flatten [U ](using asIterable : T => Iterable [U ]^ , ct : ClassTag [U ]): IArray [U ] =
101103 genericArrayOps(arr).flatten
102104
103105 /** Folds the elements of this array using the specified associative binary operator. */
@@ -222,7 +224,7 @@ object IArray:
222224 genericArrayOps(arr).sortWith(f)
223225
224226 /** Sorts this array according to an Ordering. */
225- extension [T ](arr : IArray [T ]) def sorted (using math.Ordering [T ]): IArray [T ] =
227+ extension [T ](arr : IArray [T ]) def sorted (using math.Ordering [T ]^ ): IArray [T ] =
226228 genericArrayOps(arr).sorted
227229
228230 /** Splits this array into a prefix/suffix pair according to a predicate. */
@@ -260,42 +262,42 @@ object IArray:
260262 def ++ [U >: T : ClassTag ](suffix : IterableOnce [U ]): IArray [U ] = genericArrayOps(arr) ++ suffix
261263 def :+ [U >: T : ClassTag ](x : U ): IArray [U ] = genericArrayOps(arr) :+ x
262264 def :++ [U >: T : ClassTag ](suffix : IArray [U ]): IArray [U ] = genericArrayOps(arr) :++ suffix
263- def :++ [U >: T : ClassTag ](suffix : IterableOnce [U ]): IArray [U ] = genericArrayOps(arr) :++ suffix
265+ def :++ [U >: T : ClassTag ](suffix : IterableOnce [U ]^ ): IArray [U ] = genericArrayOps(arr) :++ suffix
264266 def appended [U >: T : ClassTag ](x : U ): IArray [U ] = genericArrayOps(arr).appended(x)
265267 def appendedAll [U >: T : ClassTag ](suffix : IArray [U ]): IArray [U ] = genericArrayOps(arr).appendedAll(suffix)
266- def appendedAll [U >: T : ClassTag ](suffix : IterableOnce [U ]): IArray [U ] = genericArrayOps(arr).appendedAll(suffix)
267- def collect [U : ClassTag ](pf : PartialFunction [T , U ]): IArray [U ] = genericArrayOps(arr).collect(pf)
268- def collectFirst [U ](f : PartialFunction [T , U ]): Option [U ] = genericArrayOps(arr).collectFirst(f)
268+ def appendedAll [U >: T : ClassTag ](suffix : IterableOnce [U ]^ ): IArray [U ] = genericArrayOps(arr).appendedAll(suffix)
269+ def collect [U : ClassTag ](pf : PartialFunction [T , U ]^ ): IArray [U ] = genericArrayOps(arr).collect(pf)
270+ def collectFirst [U ](f : PartialFunction [T , U ]^ ): Option [U ] = genericArrayOps(arr).collectFirst(f)
269271 def combinations (n : Int ): Iterator [IArray [T ]] = genericArrayOps(arr).combinations(n)
270272 def concat [U >: T : ClassTag ](suffix : IArray [U ]): IArray [U ] = genericArrayOps(arr).concat(suffix)
271- def concat [U >: T : ClassTag ](suffix : IterableOnce [U ]): IArray [U ] = genericArrayOps(arr).concat(suffix)
273+ def concat [U >: T : ClassTag ](suffix : IterableOnce [U ]^ ): IArray [U ] = genericArrayOps(arr).concat(suffix)
272274 def diff [U >: T ](that : IArray [U ]): IArray [T ] = genericArrayOps(arr).diff(that.toSeq)
273- def diff [U >: T ](that : Seq [U ]): IArray [T ] = genericArrayOps(arr).diff(that)
275+ def diff [U >: T ](that : Seq [U ]^ ): IArray [T ] = genericArrayOps(arr).diff(that)
274276 def distinct : IArray [T ] = genericArrayOps(arr).distinct
275277 def distinctBy [U ](f : T => U ): IArray [T ] = genericArrayOps(arr).distinctBy(f)
276278 def startsWith [U >: T ](that : IArray [U ]): Boolean = genericArrayOps(arr).startsWith(that, 0 )
277279 def startsWith [U >: T ](that : IArray [U ], offset : Int ): Boolean = genericArrayOps(arr).startsWith(that, offset)
278- def startsWith [U >: T ](that : IterableOnce [U ]): Boolean = genericArrayOps(arr).startsWith(that, 0 )
279- def startsWith [U >: T ](that : IterableOnce [U ], offset : Int ): Boolean = genericArrayOps(arr).startsWith(that, offset)
280+ def startsWith [U >: T ](that : IterableOnce [U ]^ ): Boolean = genericArrayOps(arr).startsWith(that, 0 )
281+ def startsWith [U >: T ](that : IterableOnce [U ]^ , offset : Int ): Boolean = genericArrayOps(arr).startsWith(that, offset)
280282 def endsWith [U >: T ](that : IArray [U ]): Boolean = genericArrayOps(arr).endsWith(that)
281- def endsWith [U >: T ](that : Iterable [U ]): Boolean = genericArrayOps(arr).endsWith(that)
283+ def endsWith [U >: T ](that : Iterable [U ]^ ): Boolean = genericArrayOps(arr).endsWith(that)
282284 def groupBy [K ](f : T => K ): Map [K , IArray [T ]] = genericArrayOps(arr).groupBy(f)
283285 def groupMap [K , U : ClassTag ](key : T => K )(f : T => U ): Map [K , IArray [U ]] = genericArrayOps(arr).groupMap(key)(f)
284286 def grouped (size : Int ): Iterator [IArray [T ]] = genericArrayOps(arr).grouped(size)
285287 def inits : Iterator [IArray [T ]] = genericArrayOps(arr).inits
286288 def intersect [U >: T ](that : IArray [U ]): IArray [T ] = genericArrayOps(arr).intersect(that)
287- def intersect [U >: T ](that : Seq [U ]): IArray [T ] = genericArrayOps(arr).intersect(that)
289+ def intersect [U >: T ](that : Seq [U ]^ ): IArray [T ] = genericArrayOps(arr).intersect(that)
288290 def lazyZip [U ](that : IArray [U ]): LazyZip2 [T , U , IArray [T ]] = genericArrayOps(arr).lazyZip[U ](that).asInstanceOf [LazyZip2 [T , U , IArray [T ]]]
289- def lazyZip [U ](that : Iterable [U ]): LazyZip2 [T , U , IArray [T ]] = genericArrayOps(arr).lazyZip[U ](that).asInstanceOf [LazyZip2 [T , U , IArray [T ]]]
291+ def lazyZip [U ](that : Iterable [U ]^ ): LazyZip2 [T , U , IArray [T ]] = genericArrayOps(arr).lazyZip[U ](that).asInstanceOf [LazyZip2 [T , U , IArray [T ]]]
290292 def lengthCompare (len : Int ): Int = genericArrayOps(arr).lengthCompare(len)
291293 def padTo [U >: T : ClassTag ](len : Int , elem : U ): IArray [U ] = genericArrayOps(arr).padTo(len, elem)
292294 def partitionMap [T1 : ClassTag , T2 : ClassTag ](f : T => Either [T1 , T2 ]): (IArray [T1 ], IArray [T2 ]) = genericArrayOps(arr).partitionMap(f)
293295 def patch [U >: T : ClassTag ](from : Int , other : IterableOnce [U ], replaced : Int ): IArray [U ] = genericArrayOps(arr).patch(from, other, replaced)
294296 def permutations : Iterator [IArray [T ]] = genericArrayOps(arr).permutations
295297 def prepended [U >: T : ClassTag ](x : U ): IArray [U ] = genericArrayOps(arr).prepended(x)
296- def prependedAll [U >: T : ClassTag ](prefix : IterableOnce [U ]): IArray [U ] = genericArrayOps(arr).prependedAll(prefix)
298+ def prependedAll [U >: T : ClassTag ](prefix : IterableOnce [U ]^ ): IArray [U ] = genericArrayOps(arr).prependedAll(prefix)
297299 def reverseIterator : Iterator [T ] = genericArrayOps(arr).reverseIterator
298- def search [U >: T ](elem : U )(using Ordering [U ]): Searching .SearchResult = arr.toSeq.search(elem)
300+ def search [U >: T ](elem : U )(using Ordering [U ]^ ): Searching .SearchResult = arr.toSeq.search(elem)
299301 def search [U >: T ](elem : U , from : Int , to : Int )(using Ordering [U ]): Searching .SearchResult = arr.toSeq.search(elem, from, to)
300302 def sizeCompare (that : IArray [Any ]): Int = arr.toSeq.sizeCompare(that)
301303 def sizeCompare (that : Iterable [? ]): Int = arr.toSeq.sizeCompare(that)
@@ -312,14 +314,14 @@ object IArray:
312314 def unzip3 [T1 , T2 , T3 ](using asTriple : T => (T1 , T2 , T3 ), ct1 : ClassTag [T1 ], ct2 : ClassTag [T2 ], ct3 : ClassTag [T3 ]): (IArray [T1 ], IArray [T2 ], IArray [T3 ]) = genericArrayOps(arr).unzip3
313315 def updated [U >: T : ClassTag ](index : Int , elem : U ): IArray [U ] = genericArrayOps(arr).updated(index, elem)
314316 def view : SeqView [T ] = genericArrayOps(arr).view
315- def withFilter (p : T => Boolean ): WithFilter [T ] = new WithFilter (p, arr)
317+ def withFilter (p : T => Boolean ): WithFilter [T ]^ {p} = new WithFilter (p, arr)
316318 def zip [U ](that : IArray [U ]): IArray [(T , U )] = genericArrayOps(arr).zip(that)
317- def zip [U ](that : IterableOnce [U ]): IArray [(T , U )] = genericArrayOps(arr).zip(that)
319+ def zip [U ](that : IterableOnce [U ]^ ): IArray [(T , U )] = genericArrayOps(arr).zip(that)
318320 def zipAll [T1 >: T , U ](that : IArray [U ], thisElem : T1 , thatElem : U ): IArray [(T1 , U )] = genericArrayOps(arr).zipAll(that, thisElem, thatElem)
319- def zipAll [T1 >: T , U ](that : Iterable [U ], thisElem : T1 , thatElem : U ): IArray [(T1 , U )] = genericArrayOps(arr).zipAll(that, thisElem, thatElem)
321+ def zipAll [T1 >: T , U ](that : Iterable [U ]^ , thisElem : T1 , thatElem : U ): IArray [(T1 , U )] = genericArrayOps(arr).zipAll(that, thisElem, thatElem)
320322 def zipWithIndex : IArray [(T , Int )] = genericArrayOps(arr).zipWithIndex
321323
322- extension [T , U >: T : ClassTag ](prefix : IterableOnce [T ])
324+ extension [T , U >: T : ClassTag ](prefix : IterableOnce [T ]^ )
323325 def ++: (arr : IArray [U ]): IArray [U ] = genericArrayOps(arr).prependedAll(prefix)
324326
325327 extension [T , U >: T : ClassTag ](prefix : IArray [T ])
@@ -444,7 +446,7 @@ object IArray:
444446 * @param it the iterable collection
445447 * @return an array consisting of elements of the iterable collection
446448 */
447- def from [A : ClassTag ](it : IterableOnce [A ]): IArray [A ] =
449+ def from [A : ClassTag ](it : IterableOnce [A ]^ ): IArray [A ] =
448450 unsafeFromArray(Array .from(it))
449451
450452 def newBuilder [T ](using t : ClassTag [T ]): Builder [T , IArray [T ]] =
@@ -606,8 +608,8 @@ object IArray:
606608 * @param ys an array of AnyRef
607609 * @return true if corresponding elements are equal
608610 */
609- def equals (xs : IArray [AnyRef ], ys : IArray [AnyRef ]): Boolean =
610- Array .equals(xs.asInstanceOf [Array [AnyRef ]], ys.asInstanceOf [Array [AnyRef ]])
611+ def equals (xs : IArray [AnyRef ^ ], ys : IArray [AnyRef ^ ]): Boolean =
612+ Array .equals(xs.asInstanceOf [Array [AnyRef ^ {xs} ]], ys.asInstanceOf [Array [AnyRef ^ {ys} ]])
611613
612614 /** Returns a decomposition of the array into a sequence. This supports
613615 * a pattern match like `{ case IArray(x,y,z) => println('3 elements')}`.
@@ -660,7 +662,7 @@ object IArray:
660662 * @return a new array resulting from applying the given collection-valued function
661663 * `f` to each element of this array and concatenating the results.
662664 */
663- def flatMap [U : ClassTag ](f : T => IterableOnce [U ]): IArray [U ] = {
665+ def flatMap [U : ClassTag ](f : T => IterableOnce [U ]^ ): IArray [U ] = {
664666 val b = IArray .newBuilder[U ]
665667 var i = 0
666668 while (i < xs.length) {
@@ -671,11 +673,11 @@ object IArray:
671673 b.result()
672674 }
673675
674- def flatMap [BS , U ](f : T => BS )(using asIterable : BS => Iterable [U ], m : ClassTag [U ]): IArray [U ] =
676+ def flatMap [BS , U ](f : T => BS )(using asIterable : BS => Iterable [U ]^ , m : ClassTag [U ]): IArray [U ] =
675677 flatMap[U ](x => asIterable(f(x)))
676678
677679 /** Creates a new non-strict filter which combines this filter with the given predicate. */
678- def withFilter (q : T => Boolean ): WithFilter [T ] = new WithFilter [T ](a => p(a) && q(a), xs)
680+ def withFilter (q : T => Boolean ): WithFilter [T ]^ {p, q} = new WithFilter [T ](a => p(a) && q(a), xs)
679681
680682 end WithFilter
681683
0 commit comments