1
這可能是一個很不明顯的例子,但請耐心等待。管道中的IO操作?
我正在寫一個網絡爬蟲,需要下載網頁並將它們保存到本地磁盤。同時,作爲一個爬蟲,它需要在每個頁面上找到超鏈接並下載這些鏈接的頁面。
現在我正在查看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操作,因此無法執行我需要的操作,例如下載這些鏈接的頁面。或者我可以嗎?我能做些什麼來解決這個問題?
這是一個好主意,將其標記爲正確答案。 –