比较haskell中的两个文件/将两个IO字符串传递给一个函数
我是Haskell和monads的新手,我正在尝试编写一个简单的程序,将两个文件加载到字符串中,然后使用比较函数将字符串作为字符列表进行比较(稍后应该用一些奇特的函数来代替)。但我不知道如何将这些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 []
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
l1l1
和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")