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.

--
Cheers,
 Lemmih
_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to