
The handle will not be closed early if it becomes unreachable within
the user action (without the user closing it). It sounds like the
consensus is that that's how it should be, so I'll leave that well
enough alone.
On Wed, Dec 30, 2020 at 4:32 PM Viktor Dukhovni
On Wed, Dec 30, 2020 at 02:23:20PM -0500, David Feuer wrote:
withFile keeps the handle it creates alive until the user action completes. If we want to avoid this, we can. All that's required is to capture the weak reference that holds the handle's finalizer. Then instead of closing the handle in the end (or on exception) using hClose, withFile can run the handle's finalizer. Should we do this? Or does it run too much against the idea that handles should be managed as explicitly as possible?
I'm not sure what you mean by "keeps alive", it passes the handle to the action, and closes it when the action returns, but the action, can (if it so chooses) also close the handle in a more timely manner, because "hClose" is idempotent. So it does not seem like any change is needed here... Am I missing something?
The below compiles and runs, with no errors:
module Main (main) where import System.IO
main :: IO () main = do withFile "/etc/passwd" ReadMode $ \f -> hClose f >> hClose f withFile "/etc/passwd" ReadMode $ \f -> hClose f >> hClose f
-- Viktor. _______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries