[Haskell-cafe] Re: What is the role of $!?

apfelmus apfelmus at quantentunnel.de
Sun Nov 18 11:50:28 EST 2007

Paul Johnson wrote:
> Andrew Coppin wrote:
>> PS. There is a technical distinction between the terms "lazy" and 
>> "non-strict", and also the opposite terms "eger" and "strict". I 
>> couldn't tell you what that is.
> As I understand it, the distinction is between the mathematical term 
> "non-strict" and the implementation method of "lazy".  "Non-strict" 
> means that "reduction" (the mathematical term for evaluation) proceeds 
> from the outside in, so if I have (a+(b*c)) then first you reduce the 
> "+", then you reduce the inner (b*c).  Strict languages work the other 
> way around, starting with the innermost brackets and working outwards.
> [...]

Almost right, but strict and non-strict aren't tied to an operational 
semantics. In other words, you can talk about _|_ and strictness without 
knowing how to evaluate your expressions at all. See also

   http://en.wikibooks.org/wiki/Haskell/Denotational_semantics .

For more on the details of lazy evaluation (which actually does work 
"outside in"), there's the incomplete

   http://en.wikibooks.org/wiki/Haskell/Graph_reduction .

Of course, strict and eager as well as non-strict and lazy have pretty 
much the same effect and can be used synonymously, but they're different 
things nonetheless.


More information about the Haskell-Cafe mailing list