是否可以给 checkM 提供以下类型:
checkM :: RenderMessage master msg =>
(a -> GHandler sub master (Either msg b)) ->
Field sub master a -> Field sub master b
原因如下:
我有一个要求输入用户名的表单。使用 checkM,我立即在数据库中查找输入的用户是否存在:
userField = checkM userexists textField
userexists input = do
mbuser <- runDB $ getBy $ UniqueName input
return $ case mbuser of
Nothing -> Left ("This user does not exist!" :: Text)
(Just (Entity uid _)) -> Right input
-- I would like to write "return Right uid" above!
但是,我只能返回 input::Text,所以在表单接受用户输入后,我需要再次查找同名的数据库以获取该用户的数据库密钥,这正是我真正想要的。
(这个例子在很大程度上被简化了。本质上,我想获取一系列不同用户输入的数据库键(都在一个表单中),我只能作为 TextFields 询问,或者不?)