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.