我需要该列表以对字符串进行进一步的操作。我不想只打印字符串列表!
https://gist.github.com/bigos/0067a62e15dbed264ce6ef92e0eca58c
如果有人提供了一个示例,其中代码遍历文件名列表并打印每个文件名的前半部分,我会考虑回答的问题。
这个问题 How to get normal value from IO action in Haskell 有Riccardo T提交的答案。
有一个很好的伪代码示例。
答案 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
的结果还包含"."
和".."