Clarification on the codes of the errors thrown by listDirectory?

Hello! In `directory` package, there is a function `System.Directory.listDirectory`. It says on the box that it throws error messages that can be branched on. (`isDoesNotExistError`, `InappropriateType` and so on.) I dug into it a little, and it appears to me that, in actuality, on Windows (unlike on a Posix compliant operating system) there is no reliable way to sort the errors in some pre-defined categories like "no such file", "not a directory", et cetera. Therefore I must presume that either the documentation is incomplete and misleading, or it is I who is somehow misled. The information I have is summarized in a Stack Overflow question linked below. I would like to receive a clarification. Perhaps an amendment to the documentation should be considered? The point that initially aroused my suspicion is that `NoSuchThing` is associated with both `eNoEnt` and `eNotDir`. Is there a rationale behind this? From the `man 3 opendir`, I do not see the need for this ambiguity. This is the S.O. question I mentioned: stackoverflow.com/q/49212400 There is also a linked question that elaborates on the motivation behind my inquiry. Thank you!

The mappings of windows to c errors are enumerated in the errtable in the cbits of base like so: https://hackage.haskell.org/package/base-4.10.1.0/src/cbits/Win32Utils.c It is invoked from maperrno_func in the same file, which sends all other errors to EACCES, ENOEXEC or EINVAL. Since it never sends anything to ENOTDIR, it seems clear that from the windows side, we will never get an `InappropriateType` error. Meanwhile, on the posix side, we of course may: http://hackage.haskell.org/package/base-4.10.1.0/docs/src/Foreign.C.Error.ht... I think a PR to the docs that clarified which codes are not returned on windows, and what would be returned instead would be welcomed. Cheers, G On March 10, 2018 at 2:26:34 PM, sonne (kindaro@gmail.com) wrote: Hello! In `directory` package, there is a function `System.Directory.listDirectory`. It says on the box that it throws error messages that can be branched on. (`isDoesNotExistError`, `InappropriateType` and so on.) I dug into it a little, and it appears to me that, in actuality, on Windows (unlike on a Posix compliant operating system) there is no reliable way to sort the errors in some pre-defined categories like "no such file", "not a directory", et cetera. Therefore I must presume that either the documentation is incomplete and misleading, or it is I who is somehow misled. The information I have is summarized in a Stack Overflow question linked below. I would like to receive a clarification. Perhaps an amendment to the documentation should be considered? The point that initially aroused my suspicion is that `NoSuchThing` is associated with both `eNoEnt` and `eNotDir`. Is there a rationale behind this? From the `man 3 opendir`, I do not see the need for this ambiguity. This is the S.O. question I mentioned: stackoverflow.com/q/49212400 There is also a linked question that elaborates on the motivation behind my inquiry. Thank you! _______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
participants (2)
-
Gershom B
-
sonne