
Am Freitag 17 Februar 2006 21:12 schrieb rgo:
Hi all, my program probably goes into infinite loop... But i cannot understand where and why.
code:
import System.Directory
data MyFile = MyDir { dir_name :: String, dir_files :: [MyFile] } | MyFile { file_name :: String }
read_dir_entries :: [FilePath] -> IO [MyFile] read_dir_entries [] = return [] read_dir_entries (name:names) = do isdir <- doesDirectoryExist name; entry <- if isdir then read_dir name else return (MyFile {file_name = name}); entries <- read_dir_entries names; return (entry:entries)
read_dir :: FilePath -> IO MyFile read_dir name = do content <- getDirectoryContents name; files <- read_dir_entries content; return MyDir { dir_name = name, dir_files = files }
instance Show MyFile where show (MyDir {dir_name = name, dir_files = files}) = "\n" ++ name ++ ":\n" ++ show files show (MyFile {file_name = name}) = "\t" ++ name ++ "\n"
main = do cwd <- getCurrentDirectory; dir <- read_dir cwd; print dir;
Maybe because the file system is a graph not a tree (. and ..)?