Thanks for your reply. and I have done it by:

import System.IO
import System.Posix
import System.Directory

show_current_dir :: IO ()
show_current_dir = do
curr_dir <- getWorkingDirectory

putStrLn ("Current Working Directory:" ++ curr_dir)

ls_dir1 :: String -> IO [()]
ls_dir1 fp = do
files <- getDirectoryContents fp
putStrLn ("ls_dir1: Files in " ++ fp ++ ":")

mapM putStrLn files

read_fp_from_DirStream :: DirStream -> IO()
read_fp_from_DirStream dp = do
f <- readDirStream dp
if f == "" then return () else do putStrLn f
read_fp_from_DirStream dp


ls_dir2 :: String -> IO ()
ls_dir2 fp = do
dp <- openDirStream fp
putStrLn ("ls_dir2: files in " ++ fp ++ ":")
read_fp_from_DirStream dp
closeDirStream dp


main :: IO ()
main = do
putStrLn "Unix programming use Haskell"
show_current_dir
ls_dir1 "/"
ls_dir2 "/home"
-- is that right?

2007/4/9, Alec Berryman <alec@thened.net>:
Albert Lee on 2007-04-09 10:46:14 +0800:

>  I want to ls the filenames of a directory.

[...]

>  and I write that in haskell:
>
>  -----
>  import System.Posix
>  import System.IO
>
>  main = do
>     dp <- openDirStream "/"
>     df <- readDirStream dp
>     putStrLn df
>     closeDirStream dp
>
>
>  ------
>  It can print the first entry of the dir, but how can we list it all like the
>  C prog?  map ? list comperhension?

System.Posix is one way to do it, but you might find the functions in
System.Directory easier to use -  there's a function to get the
directory contents as a list of strings.  To print them out, you may
want to look at one of the mapM functions.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe



--
http://hanzhupeng.googlepages.com/