同时派生 Generic 和 ToJSON?

deriving Generic and ToJSON at the same time?

我有一个模块 Foo.hs,其中包含一个不派生 Generic:

的定义
-- Foo.hs
data Blather = Blather ...  -- Generic not derived here

在另一个模块中我想导出 ToJSON:

-- Bar.hs
{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-}

import GHC.Generics
import Data.Aeson

instance Generic Blather
instance ToJSON Blather

但它无法编译。如果我在定义站点的 Foo.hs 中派生 Generic,我稍后可以在另一个模块中派生 ToJSON

我可以在不修改原始 Foo.hs 的情况下在 Bar.hs 中导出 ToJSON Blather 吗?

或者有手写instance ToJSON Blather的简单方法吗?

启用 StandaloneDeriving 并使用 deriving instance ... 因为这不需要派生与数据类型位于同一模块中。

示例:

{-# LANGUAGE DeriveGeneric, StandaloneDeriving, DeriveAnyClass #-}

import GHC.Generics
import Data.Aeson
import Foo

deriving instance Generic Blather
deriving instance ToJSON Blather

main = undefined