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