copying Laziness to simplify
splitting off Evaluation into separate file
splitting off Evaluation into separate file
splitting off Evaluation into separate file
splitting off Evaluation into separate file