haskellhaskell-pipeshttp-conduit

Understanding error in haskell


I (New to Haskell) am trying to perform unpack operation on ByteString that I receive from webpage. Basically I want to search few words from webpage so I am trying to tokenize stream, then search word from words.

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

But I am getting below error

<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...

From hackage I can see that its signature is

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

Solution

  • simpleHttp "http://example.com" is of type m ByteString, for some monad m, so for example of type IO ByteString. Using do notation you can get at the result.

    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
    

    Or in ghci,

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