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