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

比较haskell中的两个文件/将两个IO字符串传递给一个函数,haskell,monads,Haskell,Monads,我是Haskell和monads的新手,我正在尝试编写一个简单的程序,将两个文件加载到字符串中,然后使用比较函数将字符串作为字符列表进行比较(稍后应该用一些奇特的函数来代替)。但我不知道如何将这些IO列表传递给比较函数和最终打印输出。。。在代码中 import System.IO import Control.Monad cmp :: (Eq a) => [a] -> [a] -> Bool cmp [] [] = True cmp []

我是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
import System.IO
进口管制
cmp::(等式a)=>[a]->[a]->Bool
cmp[][]=True
cmp[](y:ys)=假
cmp(x:xs)[]=False
cmp(x:xs)(y:ys)=(x==y)和&cmp-xs-ys
main=do

l1
l1
l2
已经是
String
,因此您可以使用
直接打印$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")
main=print=
main = print =<< liftM2 cmp (readFile "dat1") (readFile "dat2")