@@ -8,38 +8,38 @@ package scala.util
8
8
* putting them in different traits we can instead define the following:
9
9
*
10
10
* given i1: D(using ev: C) = ...
11
- * given i2: D(using ev: Not [C]) = ...
11
+ * given i2: D(using ev: NotGiven [C]) = ...
12
12
*
13
- * `Not ` is treated specially in implicit search, similar to the way logical negation
14
- * is treated in Prolog: The implicit search for `Not [C]` succeeds if and only if the implicit
13
+ * `NotGiven ` is treated specially in implicit search, similar to the way logical negation
14
+ * is treated in Prolog: The implicit search for `NotGiven [C]` succeeds if and only if the implicit
15
15
* search for `C` fails.
16
16
*
17
17
* In Scala 2 this form of negation can be simulated by setting up a conditional
18
18
* ambiguous implicit and an unconditional fallback, the way it is done with the
19
19
* `default`, `amb1` and `amb2` methods below. Due to the way these two methods are
20
- * defined, `Not ` is also usable from Scala 2.
20
+ * defined, `NotGiven ` is also usable from Scala 2.
21
21
*
22
22
* In Dotty, ambiguity is a global error, and therefore cannot be used to implement negation.
23
- * Instead, `Not ` is treated natively in implicit search.
23
+ * Instead, `NotGiven ` is treated natively in implicit search.
24
24
*/
25
- final class Not [+ T ] private ()
25
+ final class NotGiven [+ T ] private ()
26
26
27
- trait LowPriorityNot {
27
+ trait LowPriorityNotGiven {
28
28
29
29
/** A fallback method used to emulate negation in Scala 2 */
30
- given default [T ] as Not [T ] = Not .value
30
+ given default [T ] as NotGiven [T ] = NotGiven .value
31
31
}
32
- object Not extends LowPriorityNot {
32
+ object NotGiven extends LowPriorityNotGiven {
33
33
34
- /** A value of type `Not ` to signal a successful search for `Not [C]` (i.e. a failing
34
+ /** A value of type `NotGiven ` to signal a successful search for `NotGiven [C]` (i.e. a failing
35
35
* search for `C`). A reference to this value will be explicitly constructed by Dotty's
36
36
* implicit search algorithm
37
37
*/
38
- def value : Not [Nothing ] = new Not [Nothing ]()
38
+ def value : NotGiven [Nothing ] = new NotGiven [Nothing ]()
39
39
40
40
/** One of two ambiguous methods used to emulate negation in Scala 2 */
41
- given amb1 [T ](using ev : T ) as Not [T ] = ???
41
+ given amb1 [T ](using ev : T ) as NotGiven [T ] = ???
42
42
43
43
/** One of two ambiguous methods used to emulate negation in Scala 2 */
44
- given amb2 [T ](using ev : T ) as Not [T ] = ???
44
+ given amb2 [T ](using ev : T ) as NotGiven [T ] = ???
45
45
}
0 commit comments