gpt4 book ai didi

haskell - 确定 Haskell 中是否存在文件列表

转载 作者:行者123 更新时间:2023-12-03 14:56:55 27 4
gpt4 key购买 nike

我是新手,单子(monad)让我完全困惑。给定文件名列表,我想知道是否所有文件都存在。

一般来说,我想做:

import System.Directory
allFilesPresent files = foldr (&&) True (map doesFileExist files)

但是我不知道正确的方法是什么,因为有 IO Bool而不是 Bool涉及到这里。

帮助和解释会非常好,谢谢!

最佳答案

你是对的,你的代码不起作用,因为 map doesFileExist files返回 IO Bool 的列表s 而不是 Bool .要解决此问题,您可以使用 mapM而不是 map ,这将为您提供 IO [Bool] .您可以使用 >>= 解压或 <-do 内-block 然后使用 foldr (&&)开箱 [Bool]return那。结果将是 IO Bool .像这样:

import System.Directory
allFilesPresent files = mapM doesFileExist files >>=
return . foldr (&&) True

或使用 do 表示法:
import System.Directory
allFilesPresent files = do bools <- mapM doesFileExist files
return $ foldr (&&) True bools

或使用 liftM来自 Control.Monad :
allFilesPresent files = liftM (foldr (&&) True) $ mapM doesFileExist files

或使用 <$>来自 Control.Applicative :
allFilesPresent files = foldr (&&) True <$> mapM doesFileExist files

关于haskell - 确定 Haskell 中是否存在文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3982491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com