代わりに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!
ただし、return :: Textしか返すことができないため、フォームがユーザー入力を受け入れた直後に、同じ名前の別のデータベースルックアップを実行して、そのユーザーのデータベースキーを取得する必要があります。これは、私が本当に望んでいたことです。
(この例は大幅に簡略化されています。基本的に、一連の異なるユーザー入力のデータベースキーを取得したいのですが(すべて1つの形式で)、TextFieldsとしてのみ要求できますか?)