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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
sealed abstract class Base
object Test {
case object Up extends Base
def foo(d1: Base) =
d1 match {
case Up =>
}
// Sealed subtype: ModuleTypeRef <empty>.this.Test.Up.type
// Pattern: UniqueThisType Test.this.type
}
object Test1 {
sealed abstract class Base
object Base {
case object Down extends Base {
}
case object Up extends Base {
}
(d1: Base, d2: Base) =>
(d1, d2) match {
case (Up, Up) | (Down, Down) => false
case (Down, Up) => true
case (Up, Down) => false
}
}
}
object Test2 {
sealed abstract class Base
object Base {
case object Down extends Base {
}
case object Up extends Base {
}
(d1: Base, d2: Base) =>
(d1) match {
case Up | Down => false
}
}
}
object Test3 {
sealed abstract class Base
object Base {
case object Down extends Base
(d1: Base, d2: Base) =>
(d1, d2) match {
case (Down, Down) => false
}
}
}
object Test4 {
sealed abstract class Base
object Base {
case object Down extends Base {
}
case object Up extends Base {
}
}
import Test4.Base._
(d1: Base, d2: Base) =>
(d1, d2) match {
case (Up, Up) | (Down, Down) => false
case (Down, Test4.Base.Up) => true
case (Up, Down) => false
}
}
|