制作自定义Yesod表单:无法推导(Monad(FormInput m))



我正在尝试进行多文件表单输入。我正在使用"处理Yesod表单中的数据集"作为参考。

在这里,我试图使字段名称的关联列表到文件。

multiFileInput :: Monad m => RenderMessage (HandlerSite m) FormMessage =>
[Text] -> FormInput m [(Text, FileInfo)]
multiFileInput = mapM $ secondM (ireq fileField) . (getFieldKey &&& id)

我得到错误:

Could not deduce (Monad (FormInput m))
arising from a use of ‘mapM’

但我不知道该怎么处理。如果我只是把它作为一个约束来添加,我必须传播这个约束";(Monad(FormInput Handler((";直到一个呼叫站点,在那里我不知道如何处理它。FormInput m是Monad的一个实例,所以我不理解这个问题。

fileInfos <- runInputPost $ multiKeyFileInput "files"
-> No instance for (Monad (FormInput Handler))
arising from a use of ‘multiKeyFileInput’

我将尝试使用runRequestBody,但了解这个问题会很好。

FormInput数据类型应该从Monad更改为Applicative,因此必须使用traverse,这是mapMApplicative版本。

最新更新