FW: showing Handle is impure

Simon Marlow simonmar@microsoft.com
Mon, 21 Jul 2003 17:40:52 +0100


Folks,

Dean Herrington points out (see msg below from the ghc-bugs list) that
GHC's instance of Show on Handles is incorrect because it is impure.
This is because it includes parts of the Handle that are mutable, such
as the buffering state.

I've changed GHC's implementation so that it now displays just the
filename from the Handle (this is the the only immutable part of the
Handle).  This raises another question though: should there be an IO
operation for displaying the more interesting parts of a Handle?  I
propose:

  System.IO.hShow :: Handle -> IO String

Comments?

Cheers,
	Simon

-----Original Message-----
From: glasgow-haskell-bugs-admin@haskell.org
[mailto:glasgow-haskell-bugs-admin@haskell.org] On Behalf Of Dean
Herington
Sent: 15 July 2003 19:35
To: glasgow-haskell-bugs@haskell.org
Subject: showing Handle is impure

The `shows` function for type `Handle` is inappropriately impure.  In my
opinion, showing a handle should merely identify it as a handle and
distinguish it from other handles.  The information currently provided
by showing a handle should be provided with some other function; that
function should be in the IO monad.

swan(102)% ghci
   ___         ___ _
  / _ \ /\  /\/ __(_)
 / /_\// /_/ / /  | |      GHC Interactive, version 5.04.3, for Haskell
98.
/ /_\\/ __  / /___| |      http://www.haskell.org/ghc/
\____/\/ /_/\____/|_|      Type :? for help.

Loading package base ... linking ... done.
Loading package haskell98 ... linking ... done.
Prelude> :m IO
Prelude IO> h <- openFile "/dev/null" ReadMode
Prelude IO> h
{loc=3D/dev/null,type=3Dreadable,binary=3DFalse,buffering=3Dblock =
(8192)}
Prelude IO> c <- hGetContents h
Prelude IO> h
{closed}

_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs