[Haskell-beginners] (ab)use compiler optimization

Martin Hofmann martin.hofmann at uni-bamberg.de
Fri Oct 9 03:45:27 EDT 2009


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. 


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).


More information about the Beginners mailing list