【Haskell】ディレクトリ内を表示するlsをHaskellで書く

いわゆるlsコマンドまたはdirコマンドの簡単な部分だけを実装します。
ただし別の用途に使うことを前提としている話なので
 カレントディレクトリ .
 ペアレントディレクトリ ..
の二つについては表示から省くためにfilterをかけます。

import Directory
main = ( getDirectoryContents "." ) >>= printList
printList :: [String] -> IO()
printList ls = pList $ filter notCDPD ls
where
pList :: [String] -> IO ()
pList (x:xs) = do c <- getCurrentDirectory
putStrLn ( c ++ x )
pList xs
pList [] = putStr ""
notCDPD :: String -> Bool
notCDPD "."   = False
notCDPD ".."  = False
notCDPD other = True

bash-3.2$ ghc -o listing listing.hs
bash-3.2$ ./listing.exe
d:\taki\program\haskell\directorylisting.exe
d:\taki\program\haskell\directorylisting.hi
d:\taki\program\haskell\directorylisting.hs
d:\taki\program\haskell\directorylisting.o

このように。
基本的にはDirectoryに用意されている関数を使っているだけです。
getCurrentDirectory :: IO FilePath
 カレントディレクトリのパスを返す
getDirectoryContents :: FilePath -> IO [FilePath]
 現在のディレクトリ内のコンテンツをリストで返す。
FilePathというのはPreludeの中で書かれていて、Stringのことです。


category of Haskell:
【Haskell】とても簡単なHaskellプログラムについて
【Haskell】標準入力(stdin)を読み込むために
【Haskell】結構頻繁に使う関数などの話
【Haskell】高階関数と型の定義について
【Haskell】リストの処理について
【Haskell】コマンドライン引数を得る方法
【Haskell】C言語の構造体のようなものをHaskellで利用する
【Haskell】Haskellを使ってブログに微妙に役立つプログラムを書きたい(Ver.0)
【Haskell】Haskellを使ってブログに微妙に役立つプログラムを書きたい(Ver.1)
【Haskell】コマンドライン引数の取得を活用する。
【Haskell】絶対パスからファイル名だけを取り出す
【Haskell】Haskellを使ってブログに微妙に役立つプログラムを書きたい(Ver.2)

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です