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