2014-01-14 2 views
3

Этот код не typecheck:байтовой строки ожидает разные байтовой строки

import Network.HTTP.Conduit 
import qualified Data.ByteString.Char8 as BS 

main :: IO() 
main = do 
    resp <- simpleHttp "http://www.google.com" 
    putStrLn $ BS.unpack resp 

Выдает следующую ошибку:

Couldn't match expected type `BS.ByteString' 
      with actual type `Data.ByteString.Lazy.Internal.ByteString' 
In the first argument of `BS.unpack', namely `resp' 
In the second argument of `($)', namely `BS.unpack resp' 
In a stmt of a 'do' block: putStrLn $ BS.unpack resp 
Failed, modules loaded: none. 

Как это исправить? Переход на другой вариант ByteString не работает.

Тип simpleHttp Функция такова: simpleHttp :: Control.Monad.IO.Class.MonadIO m => String -> m Data.ByteString.Lazy.Internal.ByteString. Поэтому я пытаюсь получить ByteString в монаде IO и попробую unpack, но это приводит к ошибке.

+0

Что такое 'импортный сертификат Data.ByteString.Lazy as BS'? – viorior

+0

@viorior Он выдает ошибку другого типа. – Sibi

ответ

3

Существует два отдельных модуля ByteString, один для ленивых байтов и один для строгих байтов. simpleHTTP возвращает lazy bytestring, но вы импортировали строгий модуль bytestring, поэтому распаковка ожидает строгой байтовой строки.

Попробуйте изменить

import qualified Data.ByteString.Char8 as BS 

в

import qualified Data.ByteString.Lazy.Char8 as BS 

Тем не менее, вы должны быть осторожны, если вы используете версию Char8 из байтовой строки модулей, так как струна < -> байтовой строки конверсии работают, только если вы используете кодировку ASCII. Я бы порекомендовал converting your bytestrings to Text с соответствующей функцией кодирования, а затем распечатал это.

+0

Изменение его на «Lazy» вызывает другую ошибку: «Не удалось совместить тип« GHC.Word.Word8 »с« Char » Ожидаемый тип: String Тип объекта: [GHC.Word.Word8] В обратном типе вызова 'BS.unpack ' Во втором аргументе' ($)', а именно 'BS.unpack resp ' В stmt блока' do ': putStrLn $ BS.unpack resp Ошибка, загруженные модули : никто." – Sibi

+0

@Sibi: Это слово8 имеет отношение к использованию версии char8 модуля или нет. См. Мое редактирование. – hugomg

Смежные вопросы