如何获取当前目录中包含文件名的字符串列表?

时间:2018-08-26 12:01:22

标签: haskell

我需要该列表以对字符串进行进一步的操作。我不想只打印字符串列表!

到目前为止我的代码

https://gist.github.com/bigos/0067a62e15dbed264ce6ef92e0eca58c

阐明我的目标

如果有人提供了一个示例,其中代码遍历文件名列表并打印每个文件名的前半部分,我会考虑回答的问题。

解释为什么我不能做到

这个问题 How to get normal value from IO action in Haskell 有Riccardo T提交的答案。

有一个很好的伪代码示例。

2 个答案:

答案 0 :(得分:6)

您可以使用(=<<) :: ([String] -> IO b) -> (IO [String] -> IO b)来教一个函数,该函数期望字符串列表如何处理类似listDirectory "."的值,该值将生成IO封装的字符串列表。在惯用的Haskell中,其flip形式的(>>=) :: IO [String] -> ([String] -> IO b) -> IO b更常见,因为其参数按IO执行的顺序出现。因此,例如:

import System.Directory

printFirstHalfOfSingleString :: String -> IO ()
printFirstHalfOfSingleString s = putStrLn (take (length s `div` 2) s)

printFirstHalfOfEachString :: [String] -> IO ()
printFirstHalfOfEachString = mapM_ printFirstHalfOfSingleString

main = listDirectory "." >>= printFirstHalfOfEachString

答案 1 :(得分:0)

您要吗? getDirectoryContents,相当于ls在shell中吗?

这是一个列出当前工作目录下文件名的程序,每个文件都打印一半:

import System.Directory

firstHalf :: String -> String
firstHalf s = take (length s `div` 2) s

main = do
    -- Get the current working directory
    current <- getCurrentDirectory
    -- Lists the file in current
    children <- getDirectoryContents current
    mapM putStrLn (map firstHalf children)

在您的gist代码中,尝试listDirectory = getDirectoryContents并 请注意,getDirectoryContents的结果还包含"."".."