IO errors

Simon Marlow simonmar@microsoft.com
Thu, 29 Nov 2001 10:18:30 -0000


> A quick look at the source looks like both GHC and NHC will=20
> simply pass
> on errors from the OS, so for example with
>=20
>     module Main where
>=20
>     import IO
>     import Directory
>=20
>     main :: IO()
>     main =3D do catch (createDirectory "this/does/not/exist/foo")
>                     (\e -> putStrLn $ show $ map (flip ($) e) errors)
>=20
>     errors :: [(IOError -> Bool)]
>     errors =3D [isDoesNotExistError,
>               isIllegalOperation,
>               isPermissionError,
>               isAlreadyExistsError]
>=20
> both GHC and NHC give [True,False,False,False] (I don't seem to have a
> hugs Directory.hs) while the library report only allows
> isIllegalOperation, isPermissionError and isAlreadyExistsError. I
> haven't looked for other cases of this.

Two possibilities: either createDirectory should act like 'mkdir -p' and
make the whole path, or the library report should document
isDoesNotExistError as a possible error thrown by createDirectory.  I'd
vote for the latter.

No doubt there are many other cases of this, we should really do a full
audit of the I/O library specs.

Cheers,
	Simon