2016-11-07 64 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