Nick Name <[EMAIL PROTECTED]> wrote, > As the result of a conversation on haskell-gui, I have tried to > implement the disallocation of resources when a stream is garbage > collected. > > To explain myself: > > I have a function > > f :: IO [a] > > which returns a lazy stream after allocating some resource to feed it > (say installing a callback). > > I wish that the resource could be disallocated when it's no longer used. > I did the obvious implementation with Weak.addFinalizer; results are > encouraging but not completely satisfying; the scheme I used is: > > f = do > allocateResource > l <- makeTheStream > addFinalizer l (disallocateResource) > return l > > The problem is that if no memory is allocated, no garbage collection > happens; of course finalization is not guaranteed, as the manual states.
You may want to have a look at how ports are closed by finalizers in the Haskell Ports Library: http://www.cse.unsw.edu.au/~chak/haskell/ports/ It seems that the set up there is similar to yours. Cheers, Manuel _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe
