这可能是一个相当晦涩难懂的案例,但请耐心听我说。
我正在编写一个网络爬虫,需要下载网页并将其保存到本地磁盘。同时,作为一个爬虫,它需要找到每个页面上的超链接,并下载这些链接的页面。
现在我正在看this page上给出的第一个示例代码。我正在尝试编写这种类型的管道:
processLink :: Conduit S.ByteString IO S.ByteString然后我将替换示例代码中的这一行:
responseBody res $$+- sinkFile "foo.txt"使用这一行:
responseBody res $= processLinks $$+ sinkFile因此,我要做的是实现一个名为processLink的管道,它处理一个ByteString,从中提取链接,然后将原始ByteString传递给sinkFile,以便保存页面。然后,我可以递归地调用这些链接上的函数来下载这些链接的页面。
然而,由于processLink是一个纯函数,似乎我不能在processLink中做任何IO操作,因此不能做我需要的事情,比如下载那些链接的页面。或者我可以吗?我能做些什么来解决这个问题呢?
发布于 2013-04-16 15:32:16
好吧,我想通了.我想我需要的只是liftIO而已。对不起,我对Haskell是个新手。
https://stackoverflow.com/questions/16030954
复制相似问题