1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
object Test extends App {
import reflect.ClassTag
object SomeEnum extends Enumeration {
val one, two, three, four = Value
}
def sctor[A <: Set[Int]](f: Int => A)(implicit A: ClassTag[A])
: (String, Int => Set[Int]) =
(A.runtimeClass.getSimpleName, f)
val inits: Seq[(String, Int => Set[Int])] = {
import collection.immutable.{Seq => _, _}
Seq(sctor(BitSet(_)),
sctor(HashSet(_)),
sctor(ListSet(_)),
sctor(SortedSet(_)),
sctor(TreeSet(_)))
}
def sVarInfo[A](sa: Set[A]): String = {
val saa = sa.toSet[Any]
if (sa eq saa) s"""covariant (${(saa + "hi") contains "hi"})"""
else "invariant"
}
inits foreach {case (name, singleton) =>
print(s"${name}: ")
val one = singleton(1)
println(Seq(2,3,4).scanLeft(one)(_ + _) map sVarInfo toList)
}
println(s"ValueSet: ${sVarInfo(SomeEnum.values)}")
}
|