I know the Lazy is used for optimize performance, but the:
Boolean.FALSE
Boolean.TRUE
Null
are constant values, but now it has a cached field value from the Lazy.
I think a better result is that we have an interface for value, eg:
trait Eval
trait CoEval extends Eval
trait LazyEval extends Eval
We can rename the Lazy to LazyEval.