[Haskell-cafe] System.Posix.Files.isDirectory and System.Posix.Files.isSymbolicLink

Erik de Castro Lopo mle+cl at mega-nerd.com
Sun Feb 1 17:49:26 EST 2009

Hi all,

The following code creates a symbolic link in the current directory
and then uses System.Posix.Files.getFileStatus to get the status of
the link.

However, isDirectory returns True and isSymbolicLink returns False
which is very different from what the stat() system call on a POSIX
system would return. I consider this a bug.

I'm using ghc-6.8.2. Has this been fixed in a later version?


module Main where

import qualified System.Directory
import qualified System.Posix.Files

main :: IO ()
main = do
	let linkName = "tmp-link"
	cwd <- System.Directory.getCurrentDirectory
	System.Posix.Files.createSymbolicLink "/tmp" linkName
	stat <- System.Posix.Files.getFileStatus linkName
	if System.Posix.Files.isDirectory stat
		then putStrLn "Is a directory?????"
		else putStrLn "Not a directory."
	if System.Posix.Files.isSymbolicLink stat
		then putStrLn "Is a symlink"
		else putStrLn "Not a symlink?????"

Erik de Castro Lopo
"Anyone who considers arithmetical methods of producing random
digits is, of course, in a state of sin." - John Von Neumann (1951)

More information about the Haskell-Cafe mailing list