On Fri, 17 Feb 2006 17:19:53 +
Jon Fairbairn [EMAIL PROTECTED] wrote:
On 2006-02-17 at 20:12GMT rgo wrote:
Hi all,
my program probably goes into infinite loop... But i cannot understand
where and why.
getDirectoryContents will include . and .., so if you
follow those, you're bound to loop.
--
Jón Fairbairn Jon.Fairbairn at cl.cam.ac.uk
Thanks.
It's the third time in my life when do this error. :-[
here working code:
import System.Directory
data MyFile = MyDir {
dir_name :: FilePath,
dir_files :: [MyFile]
}
| MyFile {
file_name :: FilePath
}
read_dir_entries :: FilePath - [FilePath] - IO [MyFile]
read_dir_entries _ [] = return []
read_dir_entries dirname (name:names) = do
isdir - doesDirectoryExist name;
entry - if (isdir (name /= .) (name /= ..))
then read_dir (dirname ++ / ++ name)
else return (MyFile {file_name = name});
entries - read_dir_entries dirname names;
return (entry:entries)
read_dir :: FilePath - IO MyFile
read_dir name = do
content - getDirectoryContents name;
files - read_dir_entries name 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;
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe