AbstractExpression evaluation in lazy applicative languages is usually implemented by an expensive mechanism requiring time and space which may be wasted if the expression eventually needs the values anyway. Strictness analysis, which has been successfully applied to flat domains and higher order functions, is used here to annotate programs in a first order language containing lazy list constructors so that they retain their original behavior, but run more efficiently. In practice, the strictness in fields within these constructors often follows regular patterns that can be finitely represented, especially in programs that manipulate such useful structures as finite or infinite trees. The approach presented here typically generates efficien...