为什么Yesod中没有ToJSON/FromJSON的持久类型实例?

sva*_*lek 6 haskell yesod aeson

这并不是难写的生成类型的toJSON/FromJSON情况,但仍然,当你生成代码,你可以扔在?或者有一种简单的方法可以让这种情况成为Yesod用户吗?(我没有深入研究TH是如何工作的......)

更新: 好的,我喜欢这个建议但是,说我的持久类型是用户.如果我使用

$(deriveJSON id ''User)
Run Code Online (Sandbox Code Playgroud)

它产生了

  Exception when trying to run compile-time code:
  Data.Aeson.TH.withType: Unsupported type: TySynD Model.User [] (AppT (ConT Model.UserGeneric) (ConT Database.Persist.GenericSql.Raw.SqlPersist))
  Code: deriveJSON (id) 'User
Run Code Online (Sandbox Code Playgroud)

显然是因为它是别名.但

$(deriveJSON id ''UserGeneric)
Run Code Online (Sandbox Code Playgroud)

产量

Kind mis-match
The first argument of `UserGeneric' should have kind `(* -> *)
                                                      -> *
                                                      -> *',
but `backend[i5XB]' has kind `*'
Run Code Online (Sandbox Code Playgroud)

我可能仍然有错误的类型,但我找不到Persistent生成什么来获得正确的咒语.

tri*_*217 8

对于任何没有注意到Michael Snowman帖子的子评论的人,在持久的版本中你可以做到:

Person json
    name Text
    age Int
Run Code Online (Sandbox Code Playgroud)

并获取Person的ToJSON和FromJSON实例.


Mic*_*man 5

我实际上认为我们将把这个功能添加到Persistent 0.8(将在一周或两周内与Yesod 0.10一起发布).dflemstr关于依赖膨胀的说法是正确的,这就是我们过去没有这样做的原因,但我们现在已经依赖于aeson我们的配置类型(基于Yaml配置文件,它使用了aeson的数据类型).

  • 这已经实施了一段时间,请参阅:https://github.com/yesodweb/yesod/wiki/Persistent-entity-syntax#json-instances (3认同)