意外的Haskell Aeson警告:'toJSON'没有明确的实现

The*_*ter 5 haskell aeson

我正在尝试使用aeson库进行json解析,我正在关注文档.这是我现在的代码:

{-# 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
Run Code Online (Sandbox Code Playgroud)

问题是我得到了这两个警告:

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'
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚为什么会这样.

编辑:

GHC版本:7.10.2

aeson版本:0.10.0.0(最新)

The*_*ter 5

我可以通过这样做解决警告:

instance FromJSON Episode
instance ToJSON Episode where
  toJSON = genericToJSON defaultOptions
instance FromJSON Main.Series
instance ToJSON Main.Series where
  toJSON = genericToJSON defaultOptions
Run Code Online (Sandbox Code Playgroud)

我仍然不知道为什么会有警告,但我看到已经有一个关于github的错误报告.

  • 啊......看起来他们错误地将`{ - #MINIMAL toJSON# - }`pragma添加到`ToJSON`类定义中.哎呀.他们还使用一个充满孤儿实例的模块处理所有通用的东西,这非常严重. (2认同)