同时派生 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
我有一个模块 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