私はWarp(そしておそらくScotty)と酸性状態のHaskellでかなり単純なCRUD Webサービスを作っています。部分的なjsonオブジェクトをhaskellのaesonで解析する
酸性状態では、ユーザーレコードをData.Mapに保存します(例:this)。私は、それらの記録は常に創造時に完全であることを知っているので、私は多くのMaybeSで資格を取る必要はありません。しかし、ユーザを更新するとき、クライアントは部分的なjsonオブジェクトを送信することを選択することができます。
これを表現するための慣習的な方法は何でしょうか? 1つのデータ宣言、つまりMaybeSを持たないFullUserと、オプションのすべてのキーPartialUserの前にMaybeSとまったく同じものを入れて、aesonが自動的にencodeとdecodeを派生させ、最後に自分のタイプの更新関数を書いてください。 FullUser - > PartialUser - > FullUser?
これはあまりコードはありませんが、少し醜いと感じ、DRYに少し違反しているようです。それはWebサーバでのそのような共通の作業でなければならないかもしれません。おそらくそれはおそらく既にTHで一般的に解決されていますか?
私はちょうどjsonの文字列を保存し、キーが見つからない場合があることを認識していますが、スキーマの変更についてはやや不器用ですが、将来的には証明しますが、 "方法。
EDIT: また、FullUserとjson文字列から簡単な更新機能を作成するには、FullUserとaeson-lensだけを使用してください。
入力いただきありがとうございます。ええ、命名は質問をより明確にすることでした。この場合、生成されたインスタンスでは不十分なので、FullUserとjsonの文字列を取り、それを更新するためにaeson-lens(おそらくFullUserのレンズ)を使用する更新関数を使用します。 – Gurgeh