2

您是否知道任何 Haskell 库

  1. 为记录验证和(!)提供了一些简化
  2. Aeson 合作

我知道我可以编写一些构造函数,但我想删除样板而不重新发明轮子。

我正在寻找的是以下内容:

我想为每个字段定义“合同”。例如:

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 回答