On Thu, 2007-11-29 at 07:29 +0000, Thomas Davie wrote: > On 29 Nov 2007, at 06:32, PR Stanley wrote: > > > Hi > > Thanks for the response. > > > > JCC: In most languages, if you have some expression E, and when the > > computer attempts to evaluate E it goes in to an infinite loop, then > > when the computer attempts to evaluate the expression f(E), it also > > goes into an infinite loop, regardless of what f is. That's the > > definition of a strict language. > > > > PRS: Does that mean that a strict language is also imperative? > > Nope, not at all. Just a strict language has slightly fewer programs > it can evaluate correctly, as more will loop infinitely.
A -pure- strict language. > $ does not mean "do lazy evaluation" it means "apply". It's a > function, like any other: > > f ($) x = f x The syntax for defining an infix operator is: f $ x = f x -- or ($) f x = f x The latter form more clearly illustrates something that drives home the fact that ($) is completely trivial, namely, a third definition for ($) is: ($) = id > $! is the special case, which means strictly apply. It evaluates its > argument first, *then* does the application. This may or may not be > faster (and usually isn't, due to evaluating more of the argument): > > f ($!) x = seq x (f x) Again, f $! x = seq x (f x) -- or x `seq` f x This is the definition according to the Report. > seq is a special function that says "first fully evaluate my first > argument, then return my second argument", it breaks non-strict > semantics. Personally, my only use for such functions is a little bit > of debugging work [...] seq, or something that forces evaluation, is more important than that (though I wouldn't mind it being put back in a class.) E.g. (assuming no strictness analysis which can't be relied upon to -always- work), both sum = foldr (+) 0 and sum = foldl (+) 0 will stack overflow on a large enough input list, while sum = foldl' (+) 0 will not. The difference between foldl and foldl' is that, via seq, foldl' is a bit more strict. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe