[project @ 2002-12-12 13:42:46 by ross]
authorross <unknown>
Thu, 12 Dec 2002 13:42:47 +0000 (13:42 +0000)
committerross <unknown>
Thu, 12 Dec 2002 13:42:47 +0000 (13:42 +0000)
commit455d1bbd27af6c3aa0bd2c133391825fa08eefcd
treeeaa87dd701c35cb0144a388a43af44c5557a2a03
parent052e3a78006f8a4bb21d51a71788c2827b9aaa93
[project @ 2002-12-12 13:42:46 by ross]
Changes to the exception interface, as discussed on the libraries list.

1) Move bracket and bracket_ from GHC.Exception (and hence System.IO)
   to haskell98/IO.hs.  These two should now never be used (except in
   all-H98 programs), and this will save users of the new libraries from
   having to hide them.  Use the ones in Control.Exception instead.

2) Define

        type IOError = IOException      -- was Exception

   leaving the type of Prelude.ioError as IOError -> IO a,
   but adding to Control.Exception

        throwIO :: Exception -> IO a

The result is a type distinction between the variants of catch and try:

Prelude.catch           :: IO a -> (IOError -> IO a) -> IO a
Control.Exception.catch :: IO a -> (Exception -> IO a) -> IO a
System.IO.Error.try     :: IO a -> IO (Either IOError a)
Control.Exception.try   :: IO a -> IO (Either Exception a)

These are breaking changes: the first one affects only import lists,
but the second will bite in the following situations:

- using ioError on general Exceptions: use throwIO instead.

- using throw on IOErrors: if in the IO monad, use ioError instead.
  Otherwise, use throw (IOException e), but why are you throwing
  IO exceptions outside of the IO monad?

Minor changes:
- System.IO.Error now exports catch and try
- moved try from GHC.Exception to System.IO.Error, because it's
  portable and can be shared by Hugs.
libraries/base/Control/Exception.hs
libraries/base/Foreign/C/Error.hs
libraries/base/Foreign/Marshal/Alloc.hs
libraries/base/GHC/Exception.lhs
libraries/base/GHC/Handle.hs
libraries/base/GHC/IO.hs
libraries/base/GHC/IOBase.lhs
libraries/base/System/Directory.hs
libraries/base/System/Environment.hs
libraries/base/System/IO.hs
libraries/base/System/IO/Error.hs