File.IsPredicates testing the type of a file.
These functions all follow symlinks, with the exception of Is.link. The rationale is that, for example. a symlink to a directory is usually just as good when you need a directory, so dir fn should return true.
In the case where this isn't correct, you will have to call, e.g.:
(fork (&&) (not<<link) dir)