Updating: minor modification
Updating: additions/modifications by BB
Updating: preparing for supporting lazy-evaluation.
Updating: supporting non-linear lazy evaluation.
Updating: supporting typeching linear lazy-evaluation.
Updating: supporting linear lazy-evaluation.