我在Haskell中用Warp(也可能是Scotty)和酸态做出了一个相当简单的CRUD web服务。在haskell中用aeson解析部分json对象
在acid-state中,我将用户记录存储在Data.Map中(根据this示例)。我知道这些记录在创建时总是完整的,所以我不需要许多MaybeS的资格。但是,更新用户时,客户端可能会选择发送部分json对象,只填写一些字段。
什么是代表这种惯用方式?我应该有一个数据声明,FullUser,没有MaybeS,和MaybeS在所有可选键PartialUser前是完全一样的,并且让aeson为后者自动派生编码和解码,最后编写我自己的更新函数:: FullUser - > PartialUser - > FullUser?
它不会有太多的代码,但它感觉有点丑陋,就像它有点违反DRY。它应该是一个Web服务器中的常见任务,所以它可能已经被一般地解决了(可能与TH)?
我意识到我可以只存储json字符串,并且总是检查缺少的键,这使得它稍微笨拙,但是对于模式更改有更多未来的证据,但是我仍然想知道我将如何在“类型安全“ 办法。
编辑: 或者我应该只有FullUser和使用aeson镜头从FullUser和json字符串写一个简单的更新函数?
感谢您的输入!是的,命名只是为了使问题更清楚。由于生成的实例在这种情况下不够用,我想我会使用一个更新函数,该函数需要一个FullUser和一个json字符串,并使用aeson镜头(也许是FullUser的镜头)来更新它。 – Gurgeh 2013-03-04 21:32:55