向终端打印 wreq 响应
Printing a wreq response to the terminal
我想做一些很简单的事情;做出 wreq
响应并将内容打印到终端。
main.hs 看起来像这样:
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Network.Wreq
import qualified Data.ByteString.Char8 as C
main :: IO ()
main = do
r <- get "http://httpbin.org/get"
putStrLn (C.unpack r)
为什么?因为r
好像是bytestring,所以应该是unpackable的。
Prelude> import Network.Wreq
Prelude Network.Wreq> r <- get "http://httpbin.org/get"
Prelude Network.Wreq> :type r
r :: Response Data.ByteString.Lazy.Internal.ByteString
我的 .cabal 文件如下所示:
executable wreqscraper
hs-source-dirs: src
main-is: Main.hs
default-language: Haskell2010
build-depends: base >= 4.7 && < 5,
wreq,
bytestring
当我尝试用 stack build
构建它时,我得到了这个:
/Users/mkaravan/end2end/haskell_sandbox/wreqscraper/src/Main.hs:22:22: error:
• Couldn't match expected type ‘C.ByteString’
with actual type ‘Response
Data.ByteString.Lazy.Internal.ByteString’
• In the first argument of ‘C.unpack’, namely ‘r’
In the first argument of ‘putStrLn’, namely ‘(C.unpack r)’
In a stmt of a 'do' block: putStrLn (C.unpack r)
用putStrLn
(或类似的东西)打印这些内容的正确方法是什么?
您需要打开 Response ByteString
,这样您会得到一个 ByteString
,您可以将它与 C.unpack
一起使用。
这是一个工作示例:
{-# LANGUAGE OverloadedStrings #-}
import Network.Wreq
import Control.Lens
import Data.ByteString.Lazy.Char8 as C
main :: IO ()
main = do
r <- get "http://httpbin.org/get"
Prelude.putStrLn $ C.unpack $ (r ^. responseBody)
我想做一些很简单的事情;做出 wreq
响应并将内容打印到终端。
main.hs 看起来像这样: {-# LANGUAGE OverloadedStrings #-}
module Main where
import Network.Wreq
import qualified Data.ByteString.Char8 as C
main :: IO ()
main = do
r <- get "http://httpbin.org/get"
putStrLn (C.unpack r)
为什么?因为r
好像是bytestring,所以应该是unpackable的。
Prelude> import Network.Wreq
Prelude Network.Wreq> r <- get "http://httpbin.org/get"
Prelude Network.Wreq> :type r
r :: Response Data.ByteString.Lazy.Internal.ByteString
我的 .cabal 文件如下所示:
executable wreqscraper
hs-source-dirs: src
main-is: Main.hs
default-language: Haskell2010
build-depends: base >= 4.7 && < 5,
wreq,
bytestring
当我尝试用 stack build
构建它时,我得到了这个:
/Users/mkaravan/end2end/haskell_sandbox/wreqscraper/src/Main.hs:22:22: error:
• Couldn't match expected type ‘C.ByteString’
with actual type ‘Response
Data.ByteString.Lazy.Internal.ByteString’
• In the first argument of ‘C.unpack’, namely ‘r’
In the first argument of ‘putStrLn’, namely ‘(C.unpack r)’
In a stmt of a 'do' block: putStrLn (C.unpack r)
用putStrLn
(或类似的东西)打印这些内容的正确方法是什么?
您需要打开 Response ByteString
,这样您会得到一个 ByteString
,您可以将它与 C.unpack
一起使用。
这是一个工作示例:
{-# LANGUAGE OverloadedStrings #-}
import Network.Wreq
import Control.Lens
import Data.ByteString.Lazy.Char8 as C
main :: IO ()
main = do
r <- get "http://httpbin.org/get"
Prelude.putStrLn $ C.unpack $ (r ^. responseBody)