我是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
不起作用,必须更换...但是怎么做呢?
非常感谢提前提供的任何建议
l1
和l2
已经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")