Hi Bill,

please note that "null list" just forces the first cell to be evaluated. I.e. 
the list (x: xs), just x is evaluated, but not xs. That means, that just the code in you 
function is evaluated that is really required for x.
If your return type is a list, then you might get away with determining the 
length, but again it will not force the inside of each cell. The only way to 
force full evaluation is the DeepSeq class, see [1]. In case you can show your 
type you can also do that, but it will warp you results obviously.

Regards,
        Georg

[1] http://www.mail-archive.com/haskell@haskell.org/msg15819.html

On Mon, 17 Jan 2005 14:21:00 -0600, jekwtw <[EMAIL PROTECTED]> wrote:

Many thanks to both Georg and Lemmih.  Actually, I had considered laziness,
but I didn't pursue it enough.  I tried one version of runNReps in which I
passed (f x) as an additional arg; when that didn't work, a little thought
convinced me that laziness was doing me in.  I also tried another approach,
which was to "use" the function evaluation, but that didn't work either
(note: I know (f x) can not be the empty list for values of x I'm interested
in, but I don't think Haskell does, unless it's *really* smart :-) :

runNReps :: (Int -> [a]) -> Int -> Int -> IO ()
runNReps f x todo
            | todo > 0 = do let junk = (f x)
                                    if null junk then return (()) else
runNReps f x (todo - 1)
| otherwise = return (())

Ideas?

Again, many thanks,

 -- Bill Wood
    [EMAIL PROTECTED]

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users




--

---- Georg Martius,  Tel: (+49 34297) 89434 ----
------- http://www.flexman.homeip.net ---------
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to