@@ -9,63 +9,16 @@ import dotc.reporting.diagnostic.MessageContainer
9
9
object results {
10
10
11
11
/** Type alias for `List[MessageContainer]` */
12
- private type Errors = List [MessageContainer ]
13
- /** Private ADT instead of using union type, we're not dotty yet... */
14
- private sealed trait Disjunction [+ A ]
15
- /** Successful version of `Disjunction[A]` */
16
- private case class Success [A ](a : A ) extends Disjunction [A ]
17
- /** Erroneous version of `Disjunction[A]` */
18
- private case class ErrorContainer (messages : Errors ) extends Disjunction [Nothing ]
12
+ type Errors = List [MessageContainer ]
19
13
20
- /** A result of a computation is either a list of errors or the result `A`
21
- *
22
- * @note should be replaced by the right-biased `Either` from 2.12.x, TODO
23
- */
24
- class Result [+ A ] private [results] (result : Disjunction [A ]) { self =>
25
-
26
- def flatMap [B ](f : A => Result [B ]): Result [B ] =
27
- result match {
28
- case ec : ErrorContainer => new Result (ec)
29
- case Success (a) => f(a)
30
- }
31
-
32
- def map [B ](f : A => B ): Result [B ] =
33
- result match {
34
- case ec : ErrorContainer => new Result (ec)
35
- case Success (a) => new Result (Success (f(a)))
36
- }
37
-
38
- def fold [B ](onErrors : Errors => B , onResult : A => B ): B =
39
- result match {
40
- case ErrorContainer (errs) => onErrors(errs)
41
- case Success (a) => onResult(a)
42
- }
43
-
44
- def recoverWith [B >: A ](pf : PartialFunction [Errors , Result [B ]]): Result [B ] =
45
- result match {
46
- case ErrorContainer (errs) if pf.isDefinedAt(errs) => pf(errs)
47
- case _ => this
48
- }
49
-
50
- def orElse [B >: A ](res : => Result [B ]): Result [B ] =
51
- result match {
52
- case _ : ErrorContainer => res
53
- case _ => this
54
- }
55
-
56
- class WithFilter (p : A => Boolean ) {
57
- def flatMap [B ](f : A => Result [B ]) = self.flatMap(f)
58
- def map [B ](f : A => B ) = self.map(f)
59
- }
60
-
61
- def withFilter (p : A => Boolean ) = new WithFilter (p)
62
- }
14
+ /** Result is a type alias for an Either with left value `Errors` */
15
+ type Result [+ A ] = scala.util.Either [Errors , A ]
63
16
64
17
implicit class ResultConversionA [A ](val a : A ) extends AnyVal {
65
- def result : Result [A ] = new Result ( Success (a) )
18
+ def result : Result [A ] = scala.util. Right (a )
66
19
}
67
20
68
21
implicit class ResultConversionErr (val xs : Errors ) extends AnyVal {
69
- def errors [A ]: Result [A ] = new Result [ A ]( ErrorContainer (xs) )
22
+ def errors [A ]: Result [A ] = scala.util. Left (xs )
70
23
}
71
24
}
0 commit comments