[Haskell-cafe] Re: FW: Haskell
Chris Smith
cdsmith at twu.net
Tue Apr 1 19:43:48 EDT 2008
I've just got a minute, so I'll answer the factual part.
Andrew Bagdanov wrote:
> I thought that in a pure functional language any evaluation order was
> guaranteed to reduce to normal form. But then it's been a very, very
> long time since I studied the lambda calculus...
If you don't have strong normalization, such as is the case with Haskell,
then you can look at the language as being a restriction of the pure
untyped lambda calculus. In that context, you know that: (a) a given
expression has at most one normal form, so that *if* you reach a normal
form, it will always be the right one; and (b) normal order evaluation
(and therefore lazy evaluation) will get you to that normal form if it
exists. Other evaluation strategies may or may not reach the normal
form, even if the expression does have a normal form.
You may be thinking of typed lambda calculi, which tend to be strongly
normalizing. Unlike the case with the untyped lambda calculus, in sound
typed lambda calculi every (well-typed) term has exactly one normal form,
and every evaluation strategy reaches it. However, unrestricted
recursive types break normalization. This is not entirely a bad thing,
since a strongly normalizing language can't be Turing complete. So real-
world programming languages tend to provide recursive types and other
features that break strong normalization.
I'm sure there are others here who know this a lot better than I. I'm
fairly confident everything there is accurate, but I trust someone will
correct me if that confidence is misplaced.
--
Chris Smith
More information about the Haskell-Cafe
mailing list