Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

43 lines (40 sloc) 1.061 kB
/* sbt -- Simple Build Tool
* Copyright 2010 Mark Harrah
*/
package sbt
// used instead of Either[Incomplete, T] for type inference
/** Result of completely evaluating a task.*/
sealed trait Result[+T]
{
def toEither: Either[Incomplete, T]
}
/** Indicates the task did not complete normally and so it does not have a value.*/
final case class Inc(cause: Incomplete) extends Result[Nothing]
{
def toEither: Either[Incomplete, Nothing] = Left(cause)
}
/** Indicates the task completed normally and produced the given `value`.*/
final case class Value[+T](value: T) extends Result[T]
{
def toEither: Either[Incomplete, T] = Right(value)
}
object Result
{
type Id[X] = X
val tryValue = new (Result ~> Id) {
def apply[T](r: Result[T]): T =
r match {
case Value(v) => v
case Inc(i) => throw i
}
}
def tryValues[S](r: Seq[Result[Unit]], v: Result[S]): S =
{
r foreach tryValue[Unit]
tryValue[S](v)
}
implicit def fromEither[T](e: Either[Incomplete, T]): Result[T] = e match {
case Left(i) => Inc(i)
case Right(v) => Value(v)
}
}
Jump to Line
Something went wrong with that request. Please try again.