Forgot to reply all, as usual.
-------- Пересылаемое сообщение --------
21.06.2013, 12:52, "Miguel Mitrofanov" <miguelimo38@yandex.ru>:
Actually, this is not the real error you should care about. Try removing FromJSON instance completely, and you'll get a lot more. And these are fundamental: you have to decide what "j" to use when serializing. Haskell won't automagically substitute some suitable type for you.
So, that's a classic mismatch: for serializing (ToJSON) you need your "j" type to be known to the AD value (meaning: it should be quantified existentially), but for deserializing you need it to be any type (quantified universally).
All in all, AD seems to be the wrong type.
21.06.2013, 12:18, "Magicloud Magiclouds" <magicloud.magiclouds@gmail.com>:
> ,
> data ActionData = AD { oldData :: (FromJSON j, ToJSON j) => j
> , newData :: (FromJSON j, ToJSON j) => j}
> instance ToJSON ActionData where
> toJSON (AD o n) = object [ "oldData" .= o
> , "newData" .= n ]
> instance FromJSON ActionData where
> parseJSON (Object v) = AD
> <$> v .: "oldData"
> <*> v .: "newData"
> parseJSON _ = mzero
>
> I got when compile:
> No instance for (FromJSON (forall j. (FromJSON j, ToJSON j) => j))
> arising from a use of `.:'
> Possible fix:
> add an instance declaration for
> (FromJSON (forall j. (FromJSON j, ToJSON j) => j))
> In the second argument of `(<$>)', namely `v .: "oldData"'
> In the first argument of `(<*>)', namely `AD <$> v .: "oldData"'
> In the expression: AD <$> v .: "oldData" <*> v .: "newData"
>
> --
> 竹密岂妨流水过
> 山高哪阻野云飞
>
> And for G+, please use magiclouds#gmail.com.
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
-------- Завершение пересылаемого сообщения --------
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe