[Haskell-cafe] Explicit garbage collection

Miguel Mitrofanov miguelimo38 at yandex.ru
Wed Jan 6 09:39:24 EST 2010


I'll take a look at them.

I want something like this:

refMaybe b dflt ref = if b then readRef ref else return dflt
refIgnore ref = return "blablabla"
refFst ref =
    do
       (v, w) <- readRef ref
       return v
test =
    do
       a <- newRef "x"
       b <- newRef 1
       c <- newRef ('z', Just 0)
       performLocalGC -- if necessary
       x <- isStillNeeded a
       y <- isStillNeeded b
       z <- isStillNeeded c
       u <- refMaybe y "t" a -- note that it wouldn't actually read "a",
                             -- but it won't be known until runtime.
       w <- refIgnore b
       v <- refFst c
       return (x, y, z)

so that "run test" returns (True, False, True).

Dan Doel wrote:
> On Wednesday 06 January 2010 8:52:10 am Miguel Mitrofanov wrote:
>> Is there any kind of "ST" monad that allows to know if some STRef is no
>>  longer needed?
>>
>> The problem is, I want to send some data to an external storage over a
>>  network and get it back later, but I don't want to send unnecessary data.
>>
>> I've managed to do something like that with weak pointers,
>>  System.Mem.performGC and unsafePerformIO, but it seems to me that invoking
>>  GC every time is an overkill.
>>
>> Oh, and I'm ready to trade the purity of runST for that, if necessary.
> 
> You may be able to use something like Oleg's Lightweight Monadic Regions to 
> get this effect. I suppose it depends somewhat on what qualifies a reference 
> as "no longer needed".
> 
>   http://www.cs.rutgers.edu/~ccshan/capability/region-io.pdf
> 
> I'm not aware of anything out-of-the-box that does what you want, though.
> 
> -- Dan
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
> 




More information about the Haskell-Cafe mailing list