Skip to content

Commit 2de82b9

Browse files
committed
Replace Result with right biased Either alias
1 parent d3a0cc6 commit 2de82b9

File tree

1 file changed

+5
-52
lines changed

1 file changed

+5
-52
lines changed

repl/src/dotty/tools/repl/results.scala

Lines changed: 5 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -9,63 +9,16 @@ import dotc.reporting.diagnostic.MessageContainer
99
object results {
1010

1111
/** 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]
1913

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]
6316

6417
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)
6619
}
6720

6821
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)
7023
}
7124
}

0 commit comments

Comments
 (0)