Haskell 跨多个字段的验证

Haskell 跨多个字段的验证,haskell,yesod,digestive-functors,Haskell,Yesod,Digestive Functors,我正在尝试探索应用程序表单,我一直想知道如何实现一个表单来验证依赖于其他字段的字段。例如,注册表单中有password和confirm\u password字段,我想验证password==confirm\u password 我可以在窗体运行后在处理程序中完成,但这将意味着丢失错误消息 编辑:忘了提一下,我主要使用的是Yesods应用程序表单,但它们似乎与消化函数非常接近您使用的是哪种类型的表单系统?使用消化函子可以轻松完成此操作,以下是我的一个注册表单示例: registrationForm

我正在尝试探索应用程序表单,我一直想知道如何实现一个表单来验证依赖于其他字段的字段。例如,注册表单中有
password
confirm\u password
字段,我想验证
password==confirm\u password

我可以在窗体运行后在处理程序中完成,但这将意味着丢失错误消息


编辑:忘了提一下,我主要使用的是Yesods应用程序表单,但它们似乎与消化函数非常接近

您使用的是哪种类型的表单系统?使用
消化函子
可以轻松完成此操作,以下是我的一个注册表单示例:

registrationForm =
    Registration
      <$> "username" .: text Nothing
      <*> "password" .: passwordConfirmer
  where passwordConfirmer =
          validate fst' $ (,) <$> ("p1" .: text Nothing)
                              <*> ("p2" .: text Nothing)
        fst' (p1, p2) | p1 == p2  = Success p1
                      | otherwise = Error "Passwords must match"

我使用的是yesods应用程序表单,但这也是一个很好的答案
data Registration = Registration
    { regUserName :: Text
    , regPassword :: Text
    }