logo       

Re: Imperative Object Destruction: msg#00041

lang.haskell.general

Subject: Re: Imperative Object Destruction

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





<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise