Ошибка типа при извлечении почтового запроса
Я пытаюсь извлечь основной пост-запрос с помощью кода из этого вопроса (за исключением того, что я использую lbsBackEnd
вместо уже не существующих lbsSink
).
{-# LANGUAGE OverloadedStrings #-}
import Network.Wai.Handler.Warp (run)
import qualified Data.ByteString.Char8 as C
import Network.Wai.Parse (parseRequestBody, lbsBackEnd)
import Network.Wai(Response(..))
import Network.HTTP.Types(status200)
import Blaze.ByteString.Builder
main = run 3000 app
app req = do
(params, _) <- parseRequestBody lbsBackEnd req
let r = C.concat $ map (\(x,y) -> C.concat [x,y]) params
return $ ResponseBuilder
status200
[("Content-Type", "text/plain")]
$ fromByteString r
Комментарии в этом вопросе предполагают, что это должно работать, но я получаю ошибку типа
Couldn't match expected type `C.ByteString'
with actual type `bytestring-0.9.2.1:Data.ByteString.Internal.ByteString'
Expected type: [(C.ByteString, C.ByteString)]
Actual type: [Network.Wai.Parse.Param]
In the second argument of `map', namely `params'
In the second argument of `($)', namely
Что немного странно, потому что Network.Wai.Parse документы говорят, что Param
является синонимом типа (ByteString, ByteString)
Насколько я могу судить, это должно работать.
Любые советы о том, что я делаю не так?
1 ответ
Ваш вай-экстра был построен с использованием bytestring-0.9.2.1
, но у вас есть новее bytestring
пакет установлен. Если GHC не предписано использовать старую версию с -package
флаг или, скрывая более новый, выбирает последнюю установленную версию каждого пакета.
Версия пакета является частью типов, которые она определяет, поэтому ByteString
из bytestring-0.9.2.1
не тот же тип, что и ByteString
из bytestring-0.10.0.0
(или какой бы ни была ваша последняя версия).
Вы можете
- скомпилировать программу с
-package bytestring-0.9.2.1
флаг (но может быть так, что другие используемые пакеты построены против другогоbytestring
версия, тогда это не сработает). - построить программу как
Cabal
пакет, затемcabal-install
выяснил бы необходимое-package
Флаги и предоставить их GHC (если он находит согласованный план сборки). - перестраивать
wai-extra
(и, возможно, много других пакетов) против более новыхbytestring
версия. - отменить регистрацию нового
bytestring
версия (которая может потребовать пересоздания некоторых пакетов с использованием старой версии).