【发布时间】:2015-06-20 20:53:37
【问题描述】:
我有一个函数,它接受两个文件名,并将这两个文件的内容读入Strings,然后如果它们匹配则返回。函数如下:
f :: String -> String -> IO Bool
f fileName1 fileName2 = do
str1 <- readFile fileName1
str2 <- readFile fileName2
return (str1 == str2)
如果我从main内部这样使用它:
main = do
res <- f "A.txt" "B.txt"
print res
它可以工作并打印True 或False。我想要做的是,将此函数f 应用于文件名列表(元组)。对于类似的东西:
[("a.txt", "b.txt"), ("c.txt", "d.txt")]
(假设a.txt和b.txt内容相同,c.txt和d.txt不同)。
我想将它(文件名列表)转换为Bool 列表,例如:[True, False]。我尝试使用mapM,但这似乎没有映射任何内容(当我在使用mapM 后打印列表时,它会打印相同的元组列表)。
所以我的问题是:我做错了什么,我怎样才能得到上面提到的Bools 的列表?
请放轻松,因为我对 Haskell 和函数式编程还是很陌生 :)
【问题讨论】:
-
您的
mapM代码是什么样的? -
@DavidYoung
mapM (\(a, b) -> f a b) lst。lst是我在上面发布的元组列表