
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=/dev/null,type=readable,binary=False,buffering=block (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