我是Haskell和monads的新手,我正在尝试编写一个简单的程序,将两个文件加载到Strings中,然后使用比较函数将String作为Char-lists进行比较(稍后应将其替换为花式)。但我无法弄清楚如何将这些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
不起作用,必须更换......但是怎么做?
非常感谢您提前提出任何建议
答案 0 :(得分:5)
l1
和l2
已经String
,因此您可以直接使用print $ cmp l1 l2
。
答案 1 :(得分:3)
还有另一种方法可以做到这一点:liftM2 cmp
的类型为IO [a] -> IO [a] -> IO Bool
,因此liftM2 cmp (readFile "dat1") (readFile "dat2")
为IO Bool
,您可以写
main = print =<< liftM2 cmp (readFile "dat1") (readFile "dat2")