Proposal: end lazy IO results with errors/exceptions

Petr Pudlák petr.mvd at gmail.com
Tue Jul 22 17:17:10 UTC 2014


+1

Petr
Dne 21. 7. 2014 22:16 "David Feuer" <david.feuer at gmail.com> napsal(a):

> Currently,
>
> withFile "foo" hGetContents >>= putStrLn
>
> prints out an empty line, the better to confuse newbies.
>
> I propose modifying the lazyRead function in GHC.IO.Handle.Text that
> currently reads
>
> lazyRead :: Handle -> IO String
> lazyRead handle =
>    unsafeInterleaveIO $
>         withHandle "hGetContents" handle $ \ handle_ -> do
>         case haType handle_ of
>           ClosedHandle     -> return (handle_, "")
>           SemiClosedHandle -> lazyReadBuffered handle handle_
>           _ -> ioException
>                   (IOError (Just handle) IllegalOperation "hGetContents"
>                         "illegal handle type" Nothing Nothing)
>
> to something like
>
> lazyRead :: Handle -> IO String
> lazyRead handle =
>    unsafeInterleaveIO $
>         withHandle "hGetContents" handle $ \ handle_ -> do
>         case haType handle_ of
>           ClosedHandle     -> return (handle_, error "Forcing the
> result of a lazy read led to an attempt to read from a closed
> handle.")
>           SemiClosedHandle -> lazyReadBuffered handle handle_
>           _ -> ioException
>                   (IOError (Just handle) IllegalOperation "hGetContents"
>                         "illegal handle type" Nothing Nothing)
>
> Ideally that error should instead be something to throw an imprecise
> exception, but I don't know how to use those yet. I can't personally
> see a way for this to break sane, working code, but the folks on #ghc
> thought it should be discussed and debated on list.
>
> David Feuer
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20140722/95da2082/attachment.html>


More information about the Libraries mailing list