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生成什么来获得正确的咒语.
对于任何没有注意到Michael Snowman帖子的子评论的人,在持久的版本中你可以做到:
Person json
name Text
age Int
Run Code Online (Sandbox Code Playgroud)
并获取Person的ToJSON和FromJSON实例.
我实际上认为我们将把这个功能添加到Persistent 0.8(将在一周或两周内与Yesod 0.10一起发布).dflemstr关于依赖膨胀的说法是正确的,这就是我们过去没有这样做的原因,但我们现在已经依赖于aeson我们的配置类型(基于Yaml配置文件,它使用了aeson的数据类型).