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


_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to