Argumente für Konstruktoren werden auch verzögert ausgewertet, deswegen kann man mit unendlichen Listen, Bäumen usw. rechnen.
nats :: [ Int ] nats = nats_from 0 where nats_from n = n : nats_from (n+1)Das geht gut, solange man sich immer nur einen endlichen Teil ansieht
take 10 nats -- OK take 10 $ map ( \ x -> x * x) nats -- OK length nats > 20 -- nicht OKOperationen auf Maschinenzahlen sind strikt (erfordern ausgewertete Argumente)