Skip to content

Commit 7c8c2a1

Browse files
committed
A test summarizing some aspect of the strawman design.
1 parent e953827 commit 7c8c2a1

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

tests/pos/poly-inheritance.scala

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// A strawman collection design study in a nutshell
2+
import reflect.ClassTag
3+
import Predef.???
4+
5+
class It[+A] extends Ops[A, It, It[A]]
6+
7+
trait Ops[+A, +CC[_], +C] extends Any {
8+
def filter(f: A => Boolean): C = ???
9+
def map[B](f: A => B): CC[B] = ???
10+
def toSeq: It[A] = ???
11+
}
12+
13+
class ArraySeq[A] extends It[A] with Ops[A, ArraySeq, ArraySeq[A]]
14+
15+
16+
class LP {
17+
implicit def arrayToSeq[A](xs: Array[A]): ArraySeq[A] = ???
18+
}
19+
object Test extends LP {
20+
21+
implicit class ArrOps[A](val xs: Array[A]) extends AnyVal with Ops[A, ArraySeq, Array[A]] {
22+
def map[B: ClassTag](f: A => B): Array[B] = ???
23+
override def toSeq: ArraySeq[A] = arrayToSeq(xs)
24+
}
25+
26+
val xs1 = Array(1, 2, 3)
27+
val xs2 = xs1.filter(_ % 2 == 0)
28+
val xs2a: Array[Int] = xs2
29+
val xs3 = xs1.map(_ + "!")
30+
val xs3a: Array[String] = xs3
31+
32+
def f[T](f: Int => T) = {
33+
val xs1 = Array(1, 2, 3)
34+
val xs2 = xs1.filter(_ % 2 == 0)
35+
val xs2a: Array[Int] = xs2
36+
val xs3 = xs1.toSeq.map(f)
37+
val xs3a: ArraySeq[T] = xs3
38+
}
39+
}
40+
41+
42+
43+
44+

0 commit comments

Comments
 (0)