我无法绕过如何实现这一目标。我对使用monads / IO比较陌生,所以如果我错过了一些明显的东西,请原谅。我搜索了谷歌一段时间,没有得到什么,我读过的任何东西都让我弄清楚如何做到这一点。
以下是我现在所拥有的:
import System.Path.Glob (glob)
import System.Posix.Files (fileSize, getFileStatus)
dir = "/usr/bin/"
lof = do files <- (glob (dir++"*"))
(mapM_ fileS files)
fileS file = do fs <- getFileStatus file
print (fileSize fs)
正如你所看到的,这会得到尺寸并打印出来,但我仍然坚持如何实际求和它们。
答案 0 :(得分:10)
你快到了。您可以让fileS
返回文件大小而不是打印它:
return (fileSize fs)
然后,不是mapM_
ing(抛弃结果),而是mapM
(返回结果列表):
sizes <- mapM fileS files
现在sizes
是与尺寸对应的数字列表。 sum
明白他们应该很容易: - )
为了加深您对此示例的理解(并练习良好习惯),请尝试为您的函数编写类型签名。请向:t
咨询ghci以寻求帮助。