On 12/21/06, Axel Jantsch <[EMAIL PROTECTED]> wrote:

Hello,

I have a function with type

f :: Int -> Int -> Int -> Int -> Int -> NRup -> NRdown

and I want to make sure it is evaluated only once for the same set of
arguments but I observe that it is always evaluated several times.

f is implemented in C and called via the FFI. The C function may or may
not be pure. In principle it is but it is convenient to keep some state
for debugging and monitoring.
Anyway, even if it is pure, I want it to evaluate only once for a set of
arguments because of performance.

How can I enforce this?
Is there a GHC option for that?
Is there a way to write the Haskell code to achieve this?


I have asked the same question in the context of FFI, but now it seems to
me this question is not directly related to the FFI.

Haskell implementations are free to evaluate expressions as many times
as they feel like. If you want to be absolutely sure, use the IO
monad. On the other hand, you might get the same effect with a few
cleverly placed {-# NOINLINE #-} pragmas.
Do you have a minimal test case showing the undesirable behaviour?

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

Reply via email to