IOError vs. Exception vs. IOException

Ross Paterson ross@soi.city.ac.uk
Thu, 14 Nov 2002 12:03:44 +0000


On Mon, Nov 04, 2002 at 01:00:39PM -0000, Simon Marlow wrote:
> Ross Paterson wrote:
> > Two (mostly) independent proposals:
> > 
> > 1) Move bracket and bracket_ from System.IO (or GHC.Exception) to
> >    haskell98/IO.hs.  These two should now never be used anyway (except
> >    in all-H98 programs), and this would save users of the new 
> > libraries
> >    from having to hide them.
> > 
> > 2) Define
> > 
> > 	type IOError = IOException	-- was Exception
> >
> >    (or vice versa), leave the type of Prelude.ioError as IOError -> IO
> a,
> >    but add to Control.Exception
> > 
> > 	throwIO :: Exception -> IO a
> > 
> > If both are done, the only overlap seen by users of the new libraries
> > is Prelude.catch vs Control.Exception.catch and System.IO.try vs
> > Control.Exception.try.  In each case there's a type distinction
> > reflecting the semantic distinction.
> 
> Our feeling over here is that this is an unforced change, so in
> isolation it probably wouldn't be worthwhile.  It'll break some code,
> and the awkward squad paper will have to be updated to comply (although
> we just noticed it is already wrong about the behaviour of
> Prelude.catch).
> 
> However, if there's concensus that folk would prefer the alternate
> definition of IOError, then we're happy to go along with it.

There have been three responses, all in favour of change.  What's your
view now?  I would rather see a confusing interface fixed than force
the other implementations to change their Preludes to implement it,
but then I have no investment in the old interface.