我正在尝试进行多文件表单输入。我正在使用"处理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
,这是mapM
的Applicative
版本。