У меня возникли проблемы с поиском функции или обходного пути для преобразования String в Data.ByteString.Lazy.Internal.ByteString
Одна из функций в библиотеке Aeson Json называется decode
и имеет следующее описание:
decode :: FromJSON a => bytestring-0.10.0.2:Data.ByteString.Lazy.Internal.ByteString -> Maybe a
Я пытался использовать функцию pack в Data.ByteString.Lazy.Char8, но она возвращает другую ByteString. Кто-нибудь знает, как это можно исправить?
Ниже приведен пример, над которым я работаю:
import Data.Aeson
import Data.Text
import Control.Applicative
import Control.Monad (mzero)
import qualified Data.ByteString.Lazy.Internal as BLI
import qualified Data.ByteString.Lazy.Char8 as BSL
data Person = Person
{ name :: Text
, age :: Int
} deriving Show
instance FromJSON Person where
parseJSON (Object v) = Person <$>
v .: (pack "name") <*>
v .: (pack "age")
parseJSON _ = mzero
Я попытался использовать decode (BSL.pack "{\"name\":\"Joe\",\"age\":12}") :: Maybe Person
и получил следующее сообщение об ошибке:
Couldn't match expected type `bytestring-0.10.0.2:Data.ByteString.Lazy.Internal.ByteString'
with actual type `BSL.ByteString'
In the return type of a call of `BSL.pack'
In the first argument of `decode', namely
`(BSL.pack "{\"name\":\"Joe\",\"age\":12}")'
In the expression:
decode (BSL.pack "{\"name\":\"Joe\",\"age\":12}") :: Maybe Person
Помощь!
ghc-pkg list bytestring
для проверки. - person bennofs   schedule 13.12.2013