/* sbt -- Simple Build Tool
 * Copyright 2010 Mark Harrah
 */
package sbt

import Types._

/**
 * Represents a task node in a format understood by the task evaluation engine Execute.
 *
 * @tparam A the task type constructor
 * @tparam T the type computed by this node
 */
trait Node[A[_], T] {
  type K[L[x]]
  val in: K[A]
  val alist: AList[K]

  /** Computes the result of this task given the results from the inputs. */
  def work(inputs: K[Result]): Either[A[T], T]
}