如何避免为Data.Tree创建孤立的FromJSON实例

dan*_*iaz 11 json haskell aeson

我正在使用这个aeson包.我有一个Data.Tree在其声明中使用的数据类型.如下所示,只是更复杂:

 data Foo = Foo {
               bat :: Text 
             , xux :: Maybe Text 
             , tri :: Tree Text
            }
Run Code Online (Sandbox Code Playgroud)

我想用来为这种类型Data.Aeson.TH生成一个FromJSON实例.

$(deriveJSON defaultOptions ''Foo)
Run Code Online (Sandbox Code Playgroud)

但是Data.Tree没有标准实例FromJSON,这意味着我需要声明一个孤儿实例.

有没有办法避免创建该孤立实例,同时仍能使用deriveJSON

Joh*_*n L 4

为了使实例成为规范的(即不是孤立的),它需要在与类型构造函数 ( Data.Tree) 或类声明 ( Data.Aeson.Types) 相同的模块中定义。因此,定义非孤儿实例的唯一方法是分叉aeson(因为aeson取决于容器)。

我建议使用提交票据aeson,或者可能是拉取请求,以将其添加到上游。在那之前,如果您不打算分发代码,定义孤立实例应该不会造成太大麻烦。如果您正在处理要发布的代码,最安全的解决方案是创建一个新类型包装器,然后为该新类型Tree创建一个实例。FromJSON