2016-11-07 128 views
1

我(Haskell的新手)我試圖對從網頁收到的ByteString執行解包操作。基本上我想從網頁搜索幾個詞,所以我試圖標記化流,然後從單詞中搜索單詞。瞭解haskell中的錯誤

Prelude Network.HTTP.Conduit LB> LB.unpack (simpleHttp WebLink) 

但我得到以下錯誤

<interactive>:75:12: error: 
• Couldn't match expected type ‘LB.ByteString’ 
       with actual type ‘m0 LB.ByteString’ 
• In the first argument of ‘LB.unpack’, namely... 

從hackage我可以看到,它的簽名是

unpack :: ByteString -> [Word8] Source 
O(n) Converts a ByteString to a '[Word8]'. 

回答

3

simpleHttp "http://example.com"的類型爲m ByteString,對於某些單子m,因此例如類型爲IO ByteString。使用do表示法可以得出結果。

import Network.HTTP.Conduit 
import qualified Data.ByteString.Lazy.Char8 as LB 

main :: IO() 
main = do 
    res <- simpleHttp "http://example.com" 
    let string = LB.unpack res 
    putStr string 

或者在ghci中,

ghci> res <- simpleHttp "http://example.com" 
ghci> LB.unpack res 
2

simpleHttp WebLink似乎是一個一元的行動,回報值,它不是一個ByteString本身。您必須運行該過程,獲取該值,然後(假設它是一個字節串),您可以將其解壓縮。

請注意,我所知道的simpleHttp過程沒有返回字節串。您需要對返回值進行模式匹配,以檢查Either類型,如果它是響應消息而不是失敗,則可以進一步在響應上進行模式匹配。

+0

托馬斯感謝您的答覆問題和解釋。你能建議一些鏈接或一些例子來做你的建議嗎? – Manvi