我在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