私はHaskellを初めて使用しています。私はモナドに精通していますが、熟練していません。私はディレクトリの内容を取得して戻しています。今は、ディレクトリであるファイルと、存在しないファイルを分離する必要があります。System.Directoryを使用してファイルとディレクトリを別々に抽出
System.Directory
は、私はすでに、ディレクトリの内容を返す関数を作成している
doesFileExist :: FilePath -> IO Bool
と呼ばれる機能があります。ここに型シグニチャがあります:
ここで、ペアを返す関数を作成します。ペアの最初の要素は、ディレクトリではないファイルパスのみを含む必要があります。 2番目のファイルにはディレクトリであるファイルパスのみが含まれていなければなりません。
機能与え、要約すると:
doesFileExist :: FilePath -> IO Bool
getListOfFiles :: FilePath -> IO (Either IOException [FilePath])
私は関数を得ることができる方法:
getFilesAndDirs :: (FilePath -> IO (Either IOException [FilePath]), FilePath -> IO (Either IOException [FilePath]))
ペアの最初の要素がディレクトリでないファイルのみが含まれている必要があります。 2番目のディレクトリにはディレクトリのみが含まれている必要があります。 doesFileExist
関数は、ファイルがディレクトリかどうかを判断するのに役立ちます。
私はハスケルを初めて使っているので、私はこれをコード化することが非常に難しいと感じました。私は多くのことを試しましたが、タイプエラーに遭遇します。
"私は多くのことを試みましたが、タイプエラーが発生しました。" - どのような?スタックオーバーフローではなく、最初からあなたのための関数全体を書くように要求して、あなたが試したことをいくつか、それらを試している間に遭遇したことを示してください。 – amalloy
@amalloy、私は問題を理解していますが、私はそれを修正する方法を知らない - 私はハスケルの初心者です。私は '[FilePath]'のデータを持っていれば、 'doesFileExist :: FilePath-> IO Bool'関数を使って' IO Bool 'を出力することができます。しかし、私のデータは '[FilePath]'ではありません。その 'IO [FilePath]'。私の知る限りでは、私のデータはモナドの中にあるモナドに囲まれています(私の場合、IOモナドはリストモナドをラップします)。そのデータに関数を適用するには何らかの方法が必要だと思います。 –
ファイルパスとファイルパスを区別する必要がある場合は、 'path-io'パッケージ、特に' 'listDir'(http://hackage.haskell.org)を見てみることをお勧めします/package/path-io-1.2.2/docs/Path-IO.html#v:listDir)関数を使用します。 – sjakobi