first I wrote a silly haskell program: --- a program to walk through very long list ---- data Silly = A !Int | B !Int deriving (Show) main = go [a + b | a <- [0..10000], b <- [0..10000]] where go [] = do putStrLn $ "completed." go (x:xs) = do case even x of True -> putStrLn $ show (A x) False -> putStrLn $ show (B x) go xs ---------- end of the program ----------- upper program ran well, and consumed fixed memory (2.8M watched by top). but when I exported the main to C and host the whole haskell program in C, memory consumption increased CONSTANTLY. what I did are: 1) explicit name the module to `Silly' and rename `main' to `call_me_back' 2) write a c wrapper following guildlines here(http://www.haskell.org/ ghc/docs/latest/html/users_guide/ffi-ghc.html#hs-exit): --- c wrapper code begins ---- #include <stdio.h> #include "HsFFI.h" #ifdef __GLASGOW_HASKELL__ #include "Silly_stub.h" #endif #ifdef __GLASGOW_HASKELL__ extern void __stginit_Silly ( void ); #endif int main() { hs_init(0, 0); #ifdef __GLASGOW_HASKELL__ hs_add_root(__stginit_Silly); #endif call_me_back(); hs_exit(); return 0; } ---- wrapper code ends ----- then I compiled them together: ---- Makefile section begins ----- ghc -O2 --make Silly.hs ghc -O2 --make Silly_wrapper.c ghc -O2 -o Silly.out *.o ./Silly -----Makefile sect ends ----------- this program consumed memory constantly until the process being terminated by OS because of `out of memory'. I guess this must have something to do with GC (although i tried import hs_perform_gc declared in HsFFI.h and called the function, but i didn't see any change), do you have ideas? Thanks in advance, jge