Proposal: end lazy IO results with errors/exceptions
Joachim Breitner
mail at joachim-breitner.de
Mon Jul 21 20:21:43 UTC 2014
Hi,
superficially¹ +1
Joachim
¹ I like the idea, but can’t tell what the downsides are.
Am Montag, den 21.07.2014, 16:16 -0400 schrieb David Feuer:
> 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
>
--
Joachim Breitner
e-Mail: mail at joachim-breitner.de
Homepage: http://www.joachim-breitner.de
Jabber-ID: nomeata at joachim-breitner.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://www.haskell.org/pipermail/libraries/attachments/20140721/adb02a50/attachment.sig>
More information about the Libraries
mailing list