Jan de Wit wrote:
> I think hyperstrict means that a function completely evaluates *all*
> of its arguments before the body of the function, as opposed to only
> some of them. [...]

Hmm, at the moment I've got no cunning books around, but my
understanding of `hyperstrict' was the following: A function f
is hyperstrict in its i'th argument a_i if it (recursively)
evaluates *all* parts of the argument. Or to put it into other
words: If any part of the argument is bottom, so is f ... a_i ...

Example: length is strict in its argument, but the following
function is hyperstrict (at least according to my definition :-) :

   len :: Eq a => [a] -> Int
   len [] = 0
   len (x:xs) | x == x = 1 + len xs

This 'x == x' is folklore for getting rid of some space leaks,
AFAIK.

Cheers,
   Sven
-- 
Sven Panne                                        Tel.: +49/89/2178-2235
LMU, Institut fuer Informatik                     FAX : +49/89/2178-2211
LFE Programmier- und Modellierungssprachen              Oettingenstr. 67
mailto:[EMAIL PROTECTED]            D-80538 Muenchen
http://www.informatik.uni-muenchen.de/~Sven.Panne

Reply via email to