У меня следующая проблема с Data.Sequence
и Aeson. Я хочу создать свои данные DraftVar
, производные Generic
, которые используют Data.Sequence
в конструкторе DV2
.
{-# LANGUAGE DeriveGeneric, OverloadedStrings #-}
-- Imports
import Data.Aeson
import GHC.Generics
import qualified Data.Sequence as DS
-- Data
data DraftVar =
DV1 { dv1_val :: Int }
| DV2 { dv2_list :: DS.Seq DraftVar }
deriving (Show, Generic)
instance ToJSON DraftVar
instance FromJSON DraftVar
С этим кодом я получаю сообщение об ошибке: No instance for (ToJSON (DS.Seq DraftVar))
. Итак, мне нужно создать экземпляр Data.Sequence
для библиотеки Aeson.
В объявлении экземпляра ToJSON
я решаю преобразовать Data.Sequence
в список. Код такой:
import Data.Foldable as DF
instance (Show a) => ToJSON (DS.Seq a) where
toJSON l = object [ "values" .= show (DF.toList l) ]
Но что происходит, когда я хочу извлечь из этого Json список, а затем преобразовать данные в Data.Sequence
?
instance (Show a) => FromJSON (DS.Seq a) where
parseJSON (Object o) = ???
Может мне нужна библиотека или специальная функция от Aeson, я не знаю. Самый полезный пример (который я нашел) таков: Анализ массива с помощью Haskell Aeson а>
У вас есть подход получше?
aeson
былоSeq
экземпляров с 0.8.1.0. - person Ørjan Johansen   schedule 01.08.2015