I thought a let expression was just as lazy as a where clause. Is this
not true?
Dan
Lemmih wrote:
On 12/22/06, Axel Jantsch <[EMAIL PROTECTED]> wrote:
Thanks to all who replied. I still haven't figured out a solution. I
thought about memoizing the result, as several of you have suggested,
but I am scared by the huge argument space.
Lemmih <[EMAIL PROTECTED]> wrote:
> Do you have a minimal test case showing the undesirable behaviour?
gf (actCnt,sndCnt, sizex, sizey, locx, locy) iPack
= (newSndCnt sndCnt outPack, outPack)
where
outPack = fWrapper sizex sizey locx locy actCnt iPack
newSndCnt n (Abst,_) = n
newSndCnt n (Prst _,_) = n + 1
This is a simplified context for the call to the C function, which is
wrapped by fWrapper.
I figured out that one reason for double evaluation is that outPack is
used twice in the return expression of gf.
So my question now is, can I force the evaluation machine to evaluate
fWrapper once and use the same result value in both places where outPack
is used?
I tried the NOINLINE pragma both on outPack and on fWrapper, but to no
avail.
Again, I am grateful for any hint to a work-around.
Try using a let-expression and/or make the tuple arguments strict.
_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell