Haskell ライブラリを知っていますか?
- レコードの検証と (!)の簡略化を提供します。
- エイソンで動作しますか?
いくつかのコンストラクター関数を記述できることはわかっていますが、車輪の再発明をせずにボイラープレートを消去したいと考えています。
私が探しているのは次のとおりです。
フィールドごとに「契約」を定義したいと考えています。例えば:
data Person = Person {
age :: Integer
,email :: Text
,projects :: [Project]}
ここで、JSON をレコードに解析した後、次のことが成り立つことを保証したいと思います。
- [0,Inf) の年齢
- 電子メールは「^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[AZ]{2,6}$」に一致します
- プロジェクトには少なくとも 2 つのプロジェクトが含まれています
年齢が 0 未満のレコードを作成しようとすると、"age=0 no in [0,inf)" のようなエラー メッセージが表示されます。このようなものは、テンプレート Haskell を介して派生できるはずだと思います。
さらに、これをパーサーフェーズに統合したいと考えています。したがって、「Integral が必要な場合、代わりに String が発生しました」のようなエラー メッセージを取得する代わりに、次のようなエラー メッセージを取得したいと考えています。
- エラーの位置を示します (これが attoparsec で可能かどうかはわかりません)
- エラーについて説明します。