[Haskell-beginners] Evaluation order semantics..

王兵兵 wbbtiger at gmail.com
Tue Sep 24 06:01:51 CEST 2013


2013/9/24 Mike Meyer <mike at fpcomplete.com>

> 王兵兵 wbbtiger at gmail.com  wrote:
>
> Since no one else answered this, I'll take a crack at it.
>
>
> ​> ​
> The Haskell language specification states that it is a non-strict
> ​ ​
>
>> language,
> ​> ​
> but nothing about the evaluation strategy (like when and how an expression
> ​> ​
> is evaluated, and to what level). It does mention the word "evaluate"
> ​> ​
> several times when talking about pattern matching.
> ​>​
> ​> ​
> I have read a wonderful tutorial (
> ​> ​
> http://en.wikibooks.org/wiki/Haskell/Laziness <http://en.wikibooks.org/wiki/Haskell/Laziness>) about lazy evaluation and
> ​> ​
> weak head normal form, but it is just an implemenation strategy of some
> ​> ​
> compiler, which I should not depend on when writing codes.
> ​>​
> ​> ​
> I come from a strict language background and I just don't feel right if I
> ​> ​
> don't understand how my codes are execuated. I wonder why the language
> ​> ​
> specificition does not define the evaluation strategy.
> ​>​
> ​> ​
> I hope someone can enlighten me. Thanks!
>
> ​I think you have already achieved enlightenment - you just don't feel
> right about it.​
>
> ​The language specification doesn't define the evaluation strategy because
> it doesn't matter. At least, it doesn't matter in pure code. You'll get the
> same answer no matter what order expressions are evaluated in, so long as
> they are evaluated by the time they are needed. Not specifying evaluation
> order gives the compiler freedom to arrange it to get the best possible
> performance.
>
> That said, there are cases where the evaluation order matters. Come to
> think of it, most of them fall into two categories: the order matters for
> performance reasons (clearly outside the purview of a specification), or
> you want to insure that something is evaluated before it's actually used
> (like doing IO), and there are tools in the language to force evaluation in
> those cases.
>
>
Yes, if the spec does not state the evaluation order I can't predict the
performance definitely.

-- 
spockwang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20130924/ba926cd6/attachment.htm>


More information about the Beginners mailing list