Я могу json-кодировать свои данные
import Data.Aeson (ToJSON, toJSON, (.=), object)
import qualified Data.Text as T
import qualified Data.Text.Lazy as L
data ServiceResponse = ReadServiceResponse L.Text
| GenericServiceError Int L.Text
instance ToJSON ServiceResponse where
toJSON (ReadServiceResponse text) = object ["text" .= text]
toJSON (GenericServiceError code text) =
object ["code" .= code, "message" .= text]
Для данных, имеющих только одно "скалярное" значение (например, String, Int, L.Text, ...), я хотел бы получитьскалярное представление вместо объекта.Например, ReadServiceResponse
должен быть закодирован в строку json вместо объекта, подобного
{
text: "hi I'm some text."
}
Я пытался
instance ToJSON ServiceResponse where
toJSON (ReadServiceResponse text) = text
, который не компилируется
• Couldn't match expected type ‘aeson-1.3.1.1:Data.Aeson.Types.Internal.Value’ with actual type ‘L.Text’
Должен ли я преобразовать text
в Data.Aeson.Types.Internal.Value
(Как я могу это сделать)?Заранее благодарен за любую помощь