Как отобразить ответ от HTTP GET-запроса во внешнем интерфейсе, используя Скотти?

Я пробую Скотти в первый раз, и я не могу пройти мимо, сделав свой запрос GET. Ответ возвращается как тип

IO (Response bytestring-0.10.8.1:Data.ByteString.Lazy.Internal.ByteString)

Я знаю, что мне нужно преобразовать его в тип, который может выводить Скотти, но я не могу понять, как это сделать.

Мой полный код:

{-# LANGUAGE DeriveGeneric     #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where

import           Control.Lens
import           Control.Monad.IO.Class
import           Data.Aeson             (FromJSON, ToJSON, Value, decode,
                                         encode)
import           Data.Map               as Map
import           GHC.Generics
import           Lib
import           Network.Wreq           as Wreq
import           Web.Scotty             as Scotty

main :: IO ()
main =
  scotty 3000 $
   Scotty.get "/" $ do
    -- html "Hello World!"
     Wreq.get"https://www.metaweather.com/api/location/search/?query=New%20York"

Я пытался использовать LiftIO, но это все еще дает мне ошибку типа. Я хотел знать, как именно я должен преобразовать свой Ответ, чтобы я мог отобразить его во внешнем интерфейсе так же, как я отобразил свой первоначальный "Hello World" с помощью html.

1 ответ

Решение

Если вы просто ищете быстрое подтверждение концепции и не беспокоитесь о ошибочных ответах, вы можете использовать responseBody линзы и отправьте ленивую строку байтов raw вместо html:

main :: IO ()
main =
  scotty 3000 $
   Scotty.get "/" $ do
     r <- liftIO $ Wreq.get "https://www.metaweather.com/api/location/search/?query=New%20York"
     raw (r ^. responseBody)
Другие вопросы по тегам