0

System.FilePath.Findfilemanipのモジュールを使用して、処理する必要があるすべてのファイルを再帰的に検索しています (ここでは、混乱を避けるために、実行するアクションとしてコンソールへの出力のみを使用します)。さて、このコード:

import System.Environment (getArgs)
import System.FilePath (FilePath)
import System.Directory (doesDirectoryExist, getDirectoryContents,doesFileExist)
import Control.Monad
import System.FilePath.Find (find,always,fileType,(==?),FileType(..),(&&?),extension)


main= do 
    [dbFile,input]<- getArgs
    files <- findFiles input
    mapM_ putStrLn files 
    return ()

searchExtension :: String
searchExtension = ".hs"

findFiles :: FilePath -> IO [String]
findFiles = find (always) ( fileType ==? RegularFile &&? extension ==? searchExtension)

この呼び出しでうまく機能します

./myprog tet .

この場合、get引数は無視され (後で出力データベース ファイルになります)、2 番目の引数は一致するファイルを再帰的に検索します。また、ファイルを 1 つだけ指定することもできます。これは完璧です!

しかし、私は指定できるようにしたいと思います

./myprog tet パス 1 パス 2 パス 4 ファイル 1

しかし、これはもちろんパターンマッチングで失敗します:

./myprog tet . .

myprogt: ユーザー エラー (myprog.hs:11:9-22 の do 式でパターン マッチ エラー)

では、このプログラムをより柔軟にして、2 つ以上の引数を取ることができるようにするにはどうすればよいでしょうか?

実際、こんな質問をして申し訳ありませんが、私の Haskell の知識は限られていますが、最初のプロジェクトでやらなければならない新しいことごとに増えています。

4

1 に答える 1