在Haskell中使用IO操作进行映射

罗什纳尔

我有一个函数,需要两个文件名,并将这两个文件的内容读入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

它可以工作并打印TrueFalse我想要做的是将此功能f应用于文件名列表(元组)。对于类似的东西:

[("a.txt", "b.txt"), ("c.txt", "d.txt")]

(假设a.txtb.txt具有相同的内容,c.txt并且d.txt与众不同)。

我想将其(文件名Bool列表)转换为类似列表[True, False]我尝试使用mapM,但是似乎没有映射任何内容(当我在使用后打印列表时mapM,它会打印相同的元组列表)。

所以我的问题是:我在做错什么,如何获得Bool上面提到s的列表

请对我轻松一点,因为我对Haskell和函数式编程还很陌生:)

亚历克

这是f'您所描述的功能

f' :: [(String,String)] -> IO [Bool]
f' = mapM $ uncurry f

让我知道是否有不清楚的地方!而且,为了清楚起见,这是如何运行它:

main = do
        res <- f' [("a.txt", "b.txt"), ("c.txt", "d.txt")]
        print res

编辑

该函数采用无点形式,因此等效于f' lst = mapM (uncurry f) lstmapM实质上的每个元素映射lst使用f作为函数,并推动IO到列表的外部。

uncurry只需采用一种形式的功能a -> b -> c并将其转换为一个(a,b) -> c,这就是我们想要的,因为您有一个元组列表。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 Haskell 中使用条件映射

来自分类Dev

在Go中使用TTL选项进行映射

来自分类Dev

在Java中使用AND(&&)关系进行映射

来自分类Dev

在Chrome中使用Browserify进行代码映射

来自分类Dev

在Haskell中使用RankNTypes进行类型检查

来自分类Dev

在Haskell中使用提示进行怪异缓冲

来自分类Dev

在python中使用嵌套列表进行操作

来自分类Dev

在python中使用嵌套列表进行操作

来自分类Dev

无法在XPage OneUI的操作栏中使用SSJS进行操作?

来自分类Dev

在rxjava中使用Observable序列进行一对多映射

来自分类Dev

在Spring配置中使用映射类进行休眠配置

来自分类Dev

在Cassandra中使用对象映射器进行批量插入

来自分类Dev

在BeanIO中使用带注释的类而不是XML进行映射

来自分类Dev

在python中使用嵌套映射和itemgetter进行解析

来自分类Dev

在Python中使用标志值高效地进行双向映射

来自分类Dev

在实体框架中使用未映射的表进行联接

来自分类Dev

在R中使用ggplot面进行地理空间映射?

来自分类Dev

在BeanIO中使用带注释的类而不是XML进行映射

来自分类Dev

在Grails 3.0.1中使用休眠注释进行映射

来自分类Dev

在 nhibernate 中使用复合键进行多对一映射

来自分类Dev

无法在Haskell中进行IO

来自分类Dev

在Haskell中使用State monad进行广度优先搜索

来自分类Dev

如何在Haskell中使用yaml库进行别名?

来自分类Dev

如何在Haskell中使用偏序对列表进行排序?

来自分类Dev

Haskell:在FreeMonad解释器中使用MonadState进行记忆

来自分类Dev

在Haskell中使用参数进行Sqlite3更新

来自分类Dev

在Haskell中使用匿名函数与非匿名函数进行键入

来自分类Dev

Haskell:在FreeMonad解释器中使用MonadState进行记忆

来自分类Dev

在本机中使用Agora.io进行语音通话

Related 相关文章

  1. 1

    在 Haskell 中使用条件映射

  2. 2

    在Go中使用TTL选项进行映射

  3. 3

    在Java中使用AND(&&)关系进行映射

  4. 4

    在Chrome中使用Browserify进行代码映射

  5. 5

    在Haskell中使用RankNTypes进行类型检查

  6. 6

    在Haskell中使用提示进行怪异缓冲

  7. 7

    在python中使用嵌套列表进行操作

  8. 8

    在python中使用嵌套列表进行操作

  9. 9

    无法在XPage OneUI的操作栏中使用SSJS进行操作?

  10. 10

    在rxjava中使用Observable序列进行一对多映射

  11. 11

    在Spring配置中使用映射类进行休眠配置

  12. 12

    在Cassandra中使用对象映射器进行批量插入

  13. 13

    在BeanIO中使用带注释的类而不是XML进行映射

  14. 14

    在python中使用嵌套映射和itemgetter进行解析

  15. 15

    在Python中使用标志值高效地进行双向映射

  16. 16

    在实体框架中使用未映射的表进行联接

  17. 17

    在R中使用ggplot面进行地理空间映射?

  18. 18

    在BeanIO中使用带注释的类而不是XML进行映射

  19. 19

    在Grails 3.0.1中使用休眠注释进行映射

  20. 20

    在 nhibernate 中使用复合键进行多对一映射

  21. 21

    无法在Haskell中进行IO

  22. 22

    在Haskell中使用State monad进行广度优先搜索

  23. 23

    如何在Haskell中使用yaml库进行别名?

  24. 24

    如何在Haskell中使用偏序对列表进行排序?

  25. 25

    Haskell:在FreeMonad解释器中使用MonadState进行记忆

  26. 26

    在Haskell中使用参数进行Sqlite3更新

  27. 27

    在Haskell中使用匿名函数与非匿名函数进行键入

  28. 28

    Haskell:在FreeMonad解释器中使用MonadState进行记忆

  29. 29

    在本机中使用Agora.io进行语音通话

热门标签

归档