[Haskell-cafe] Is lazyness make big difference?

Nicolas Frisby nicolas.frisby at gmail.com
Thu Feb 15 12:30:12 EST 2007


Someone already mentioned John Hughes paper. Another resource is SPJ's
"hair shirt" slides (also discusses type classes and monads).

http://research.microsoft.com/~simonpj/papers/haskell-retrospective/HaskellRetrospective.pdf

Laziness is addressed beginning on slide 19.

Other Nick

On 2/15/07, Nick <nick.linker at rambler.ru> wrote:
>
>  Hi all,
>
>  (Another topic stolen from a Russian forum discussion).
>
>  As everyone know, there are lot of strict languages, that have
> possibilities to "switch on" lazy evaluation when needed.
>
>  But the examples that I saw on Haskell, there was not much use of lazy
> evaluation, often there were just several lazy points, and the rest could be
> done strictly without loss of generality. For example, in finding primes:
>
>  main = print primes
> primes = 2:filter is_prime [3,5..]
> is_prime n = all (\p-> n `mod` p /= 0) (takeWhile (\p-> p*p<=n) primes)
>  We can rewrite this in strict languages with lazy constructs. For example,
> in Scala (of course stream is not only lazily evaluated thing there)
> def main(args: Array[String]): Unit = {
>      val n = Integer.parseInt(args(0))
>      System.out.println(primes(ints(2)) take n toList)
>  }
>
>  def primes(nums: Stream[Int]): Stream[Int] =
>      Stream.cons(nums.head,
>          primes ((nums tail) filter (x => x % nums.head != 0)) )
>
>  def ints(n: Int): Stream[Int] =
>      Stream.cons(n, ints(n+1))
>
>  I think the Haskell solution is more compact due to syntactic sugar,
> curring and "parentheses-free-ness", *not* lazy evaluation.
>
>  According to one guy's analogy: the Real World is strict - in order to
> drink tea, you have to put the cattle on the fire, wait until water boils,
> brew tea and then drink. Not the cattle is put on the fire, water boils and
> the tea is brewed when you take the empty cup to start drinking. :-)
>
>  The question is the following: how big the gap between strict languages
> with lazy constructs and Haskell? Does the default lazyness have irrefutable
> advantage over default strictness?
>
>  Thank you for the attention.
>
>  With best regards,
>  Nick.
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>


More information about the Haskell-Cafe mailing list