2015-10-09 1 views
5

Je suis en train d'utiliser la bibliothèque aeson pour l'analyse JSON et je suis la documentation Ceci est mon code en ce moment:avertissement inattendu Haskell Aeson:. Pas de mise en œuvre explicite pour « toJSON »

{-# LANGUAGE OverloadedStrings #-} 
{-# LANGUAGE DeriveGeneriC#-} 

import Data.Aeson as Ae 
import Data.Text as T 
import qualified Data.ByteString.Lazy as BS 
import GHC.Generics 

data Episode = Episode { season :: Int 
         , epNum :: Int 
         } deriving (Show, Generic) 

data Series = Series { title  :: !T.Text 
        , curEpisode :: Episode 
        } deriving (Show, Generic) 

instance FromJSON Episode 
instance ToJSON Episode   -- Warning here 
instance FromJSON Main.Series 
instance ToJSON Main.Series  -- Warning here 

Le problème est que je reçois ces deux avertissements.

src\Main.hs:21:10: Warning: 
    No explicit implementation for 
     `toJSON' 
    In the instance declaration for `ToJSON Episode' 

src\Main.hs:22:10: Warning: 
    No explicit implementation for 
     `toJSON' 
    In the instance declaration for `ToJSON Main.Series' 

Je ne peux pas comprendre pourquoi ce phénomène se produit

EDIT:

GHC Version: 7.10.2

version Aeson: 0.10.0.0 (dernier)

+0

Bizarre. Quelle version de 'aeson' est-ce? Quelle version de GHC? – dfeuer

+0

@dfeuer Bizarre en effet. J'ai édité le post pour inclure ces informations! – TheCrafter

Répondre

5

Je peux travailler autour des mises en garde en faisant ceci:

instance FromJSON Episode 
instance ToJSON Episode where 
    toJSON = genericToJSON defaultOptions 
instance FromJSON Main.Series 
instance ToJSON Main.Series where 
    toJSON = genericToJSON defaultOptions 

Je ne toujours pas savoir pourquoi les avertissements sont là mais j'ai vu qu'il y a déjà un rapport de bug on github.

+2

Ah ... on dirait qu'ils ont ajouté par erreur un pragma '{- # MINIMAL toJSON # -}' à la définition de la classe 'ToJSON'. Oops. Ils traitent aussi tous les trucs génériques en utilisant un module plein d'instances orphelines, ce qui est vraiment très moche. – dfeuer

+0

@dfeuer Oui, vous avez raison. – TheCrafter