/**
 * Defines a Task, a wrapper around a chainable method. Input and Output
 * represents the parameters and return value of the run function respectively.
 * Think of them as the input and output in a pipe. Constructor parameters
 * can optionally be used to parameterize tasks, such as with acard year and
 * semester.
 */ export interface Task < Input = void , Output = void > { readonly name : string ; run ( input ) : Promise < Output > ; }