我有一个模块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
。
我可以在ToJSON Blather
中导出Bar.hs
而无需修改原始Foo.hs
吗?
或者有一种简单的方法可以手写instance ToJSON Blather
吗?
答案 0 :(得分:4)
启用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