2

Haskell ライブラリを知っていますか?

  1. レコードの検証と (!)の簡略化を提供します。
  2. エイソンで動作しますか?

いくつかのコンストラクター関数を記述できることはわかっていますが、車輪の再発明をせずにボイラープレートを消去したいと考えています。

私が探しているのは次のとおりです。

フィールドごとに「契約」を定義したいと考えています。例えば:

data Person = Person {
     age   :: Integer
    ,email :: Text
    ,projects :: [Project]}

ここで、JSON をレコードに解析した後、次のことが成り立つことを保証したいと思います。

  1. [0,Inf) の年齢
  2. 電子メールは「^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[AZ]{2,6}$」に一致します
  3. プロジェクトには少なくとも 2 つのプロジェクトが含まれています

年齢が 0 未満のレコードを作成しようとすると、"age=0 no in [0,inf)" のようなエラー メッセージが表示されます。このようなものは、テンプレート Haskell を介して派生できるはずだと思います。

さらに、これをパーサーフェーズに統合したいと考えています。したがって、「Integral が必要な場合、代わりに String が発生しました」のようなエラー メッセージを取得する代わりに、次のようなエラー メッセージを取得したいと考えています。

  1. エラーの位置を示します (これが attoparsec で可能かどうかはわかりません)
  2. エラーについて説明します。
4

1 に答える 1

2

ocharles がまさにそのようなパッケージを作成したようです! http://hackage.haskell.org/package/digestive-functors-aeson

于 2013-02-28T22:51:23.263 に答える