Я действительно борюсь за квадрат этого круга.Lazy bytestring insanity
getPostContent использует Wreq, чтобы загрузить сообщение в блоге и вернуть его.
getPostContent url = do
let opts = defaults & W.checkStatus .~ (Just $ \_ _ _ -> Nothing)
postResp <- getWith opts $ baseUrl ++ url
if postResp ^. W.responseStatus . statusCode == 200
-- then return $ LEnc.encodeUtf8 $ postResp ^. W.responseBody . _String -- :: Prism T Text
then return $ postResp ^. W.responseBody . _String
else return "error downloading"
Это потребляется parseLBS
do
page <- getPostContent r -- :: IO String
let
-- parseLBS :: Data.ByteString.Lazy.Internal.ByteString -> Text.XML.Document
cursor = fromDocument $ parseLBS page
Как я понимаю, getPostContent предоставляет Data.Text.Text
, в то время как мне нужно Data.ByteString.Lazy.Internal.ByteString
и я не могу работать, как преобразовать их (думали, что это должно быть this см фрагмент кода выше, но он не компилируется).
Couldn't match expected type ‘Data.ByteString.Lazy.Internal.ByteString’
with actual type ‘T.Text’
In the first argument of ‘parseLBS’, namely ‘page’
In the second argument of ‘($)’, namely ‘parseLBS page’
Компиляция сообщение с кодированием раскомментировал
Couldn't match type ‘TL.Text’
with ‘T.Text’
NB: ‘TL.Text’ is defined in ‘Data.Text.Internal.Lazy’
‘T.Text’ is defined in ‘Data.Text.Internal’
Expected type: (TL.Text -> Const TL.Text TL.Text)
-> Data.ByteString.Lazy.Internal.ByteString
-> Const TL.Text Data.ByteString.Lazy.Internal.ByteString
Actual type: (T.Text -> Const TL.Text T.Text)
-> Data.ByteString.Lazy.Internal.ByteString
-> Const TL.Text Data.ByteString.Lazy.Internal.ByteString
In the second argument of ‘(.)’, namely ‘_String’
In the second argument of ‘(^.)’, namely ‘responseBody . _String’
Он смотрит на меня, как 'encodeUtf8' или подобное должно работать. Когда вы говорите, что это «не компилируется», с чем это происходит? – MathematicalOrchid
добавил, что сообщение компилятора тоже –
Право. Поэтому 'encodeUtf8' хочет ленивый' Text', но у вас строгий 'Text'. Я думаю, что есть функция преобразования где-то ... Да, попробуйте 'Data.Text.Lazy.toStrict' или' fromStrict'. – MathematicalOrchid