Warp (およびおそらく Scotty) と酸状態を使用して、Haskell でかなり単純な CRUD Web サービスを作成しています。
酸性状態では、User レコードを Data.Map に格納します (この例のように)。これらのレコードは作成時に常に完全であることを知っているので、多くの MaybeS で資格を得る必要はありません。ただし、ユーザーを更新する場合、クライアントは一部のフィールドのみが入力された部分的な json オブジェクトを送信することを選択する場合があります。
これを表現する慣用的な方法は何でしょうか? 1 つのデータ宣言、FullUser、MaybeS なし、およびすべてのオプションのキー、PartialUser の前に MaybeS とまったく同じものを用意し、aeson に後者のエンコードとデコードを自動的に導出させ、最終的にタイプ :: の独自の更新関数を作成する必要があります。 FullUser -> PartialUser -> FullUser?
大したコードではありませんが、少し見苦しく、DRY に少し違反しているように感じます。これは Web サーバーでは一般的なタスクであるはずなので、おそらく既に一般的に (おそらく TH で) 解決されているのではないでしょうか?
json文字列を保存するだけで不足しているキーを常にチェックできるため、少し面倒ですが、スキーマの変更に対する将来の証拠が増えますが、「タイプセーフ」な方法でそれを行う方法を知りたいです。
編集:または、おそらく FullUser のみを持ち、aeson-lens を使用して、FullUser と json 文字列から単純な更新関数を作成する必要がありますか?