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