unsafePerformIO and NOINLINE Pragma
Jan Christiansen
jac at informatik.uni-kiel.de
Tue Sep 13 09:52:18 EDT 2005
Hi!
I want to analyse the laziness of a data structure. To check how many nodes
are constructed I use a global counter.
counter :: IORef Int
counter = unsafePerformIO (newIORef 0)
This counter is increased every time the constructor is called by redefining
the constructor OBDD as follows.
oBDD low var high =
seq (unsafePerformIO (modifyIORef counter (+1))) (OBDD low var high)
This works fine.
When I compile with optimisations the counter is always set to one no matter
how many nodes are constructed. I thought this would be caused by inlining.
Therefore I have added two NOINLINE pragmata.
{-# NOINLINE counter #-}
{-# NOINLINE oBDD #-}
Although the counter doesn't work. Is there another optimisation that can
cause harm? Is there something wrong with the pragmata?
best regards, Jan
More information about the Glasgow-haskell-users
mailing list