我找到了一种方法可以将多个intField
(例如)组合成类似于Field m [Int]
的内容
功能签名是:
multiplyField :: Monad m => (RenderMessage (HandlerSite m) FormMessage, Show a)
=> Field m a -> Field m [a]
当然,这可以正常工作(除了那些多选的东西)
解析器以可接受的方式工作。 但是fieldView非常糟糕:
fieldView = \theId name attrs vals isReq -> do
let views = map (\val -> view1 theId name attrs val isReq) $ sequenceA vals
[whamlet|$forall view <- views
^{view}
|]
问题是几个字段的整个错误只折叠成一个val(Left Text [a]
)
如果用户总是引入正确的数据,此解决方案可以正常工作,但如果出现错误,则所有字段都会消失但只有一个。
我不明白为什么解析器支持n个值[Text]
,但视图号为
如何获得[Left Text a]
而不是Left Text [a]
?