There seemed to be some fundamental misunderstandings about what makes a language "lazy". It's not magic. It happens as a result of one key design decision: when calling a function (or method in OO language), are the parameters evaluated before making the call, or are the unevaluated parameters passed and evaluated only when used?
Related to that, strictness points are where evaluation of such unevaluated parameters are forced. But not having a strictness point somewhere doesn't mean that no evaluation happens. And it doesn't change the behavior of normally lazy operations such as not taking both branches of a conditional.
---
Bryan S. Morse
BYU Computer Science
mo...@cs.byu.edu
http://morse.cs.byu.edu