[Haskell-beginners] (ab)use compiler optimization
Martin Hofmann
martin.hofmann at uni-bamberg.de
Fri Oct 9 03:45:27 EDT 2009
Hello,
To analyse, test, and debug my system I use a WriterT for logging. The
log file created can be quite large and a lot of 'Log' is created in
memory, too.
I thought, that maybe I can (ab)use the compiler to switch logging on
and off as needed before compiling. I tried to either always return an
empty Log when running the WriterT, or just always ignore logging
depending on a constant and hoped GHC to optimize the logging away.
_NOLOGGING = True
runWT :: (Monad m) => (WriterT Log m a) -> m (a, Log)
runWT m
| _NOLOGGING = runWriterT m empty >>= \(a,_) -> return (a,emptyLog )
| otherwise = runWriterT m emptyLog
logging :: Message -> WriterT Log m ()
logging msg = if _NOLOGGING then return () else tell msg
However, according to the heap profile there is still a lot of 'Log' in
the memory. So, is this possible this way at all and if not, is there
another (apart from removing all logging by hand).
Thanks
More information about the Beginners
mailing list