Imperative Object Destruction
Ashley Yakeley
ashley@semantic.org
Mon, 13 Nov 2000 02:30:17 -0800
At 2000-11-13 02:18, Hannah Schroeter wrote:
>That's the problem. And I think your solution is overly complicated.
>
>Why not copy what Common Lisp does, just that Haskell can do it without
>macros:
>
>withOpenFile :: FilePath -> IOMode -> (Handle -> IO a) -> IO a
>withOpenFile name mode action = do
> handle <- openFile name mode
> result <- (action handle) `finally` (hClose handle)
> return result
>
>Usage:
>
>count :: Handle -> IO Int
>read :: Handle -> IO [Byte]
>
> fileLength <- withOpenFile "filename" ReadMode $ \handle ->
> count handle
> fileContent <- withOpenFile "filename" ReadMode $ \handle ->
> read handle
Doesn't fulfill condition 2:
2. no read or write operations are performed on file-handles that have
not yet been opened, or that have already been closed.
...since you can do
stealHandle = withOpenFile "filename" ReadMode (\handle -> handle)
stealHandle >>= read
--
Ashley Yakeley, Seattle WA