比较 haskell 中的两个文件/将两个 IO 字符串传递给一个函数



我是Haskell和monads的新手,我正在尝试编写一个简单的程序,将两个文件加载到字符串中,然后使用比较函数将字符串作为字符列表进行比较(稍后应该用一些花哨的东西代替)。但是我不知道如何将这些 IO 列表传递给比较函数和最终打印输出......在代码中

import System.IO  
import Control.Monad

cmp :: (Eq a) => [a] -> [a] -> Bool
cmp []      []      = True
cmp []      (y:ys)  = False
cmp (x:xs)  []      = False
cmp (x:xs)  (y:ys)  = (x==y) && cmp xs ys
main = do
    l1 <- readFile "dat1"
    l2 <- readFile "dat2"
    print . cmp =<< l1 =<<l2

最后一行

print . cmp =<< l1 =<<l2

不起作用,必须更换...但是怎么做呢?

非常感谢提前提供的任何建议

l1l2已经String,所以你可以直接使用print $ cmp l1 l2

还有另一种方法可以做到这一点: liftM2 cmp将具有类型 IO [a] -> IO [a] -> IO Bool ,因此liftM2 cmp (readFile "dat1") (readFile "dat2")IO Bool,您可以编写

main = print =<< liftM2 cmp (readFile "dat1") (readFile "dat2")

最新更新