2011-10-30 18 views
1

私のYesodプロジェクト(スキャフォールディングからビルド)をコンパイルしようとすると、次のエラーが発生します。関数型定義のガイダンスが必要

No instance for (PersistBackend (GGHandler Scheduler Scheduler) IO) 
    arising from a use of `checkDateStatus' 
Possible fix: 
    add an instance declaration for 
    (PersistBackend (GGHandler Scheduler Scheduler) IO) 
In the first argument of `checkM', namely `checkDateStatus' 
In the expression: checkM checkDateStatus 
In the expression: 
    checkM checkDateStatus 
    $ (jqueryDayField 
     (def {jdsChangeYear = True, jdsYearRange = "2011:2012"})) 

これは、Haskellの型推論が失敗していると考えられます。このような場合は、checkDateStatusを正確に定義するだけです。もしそうでなければ、正しい方向へのプッシュは歓迎されるだろう。もし私が正しければ、私はまだcheckDateStatusの型定義がどんなものであるべきかについて悩んでいます。私は型推論に依存しています。私が関連していると思うコードは以下の通りです。私が何かを見逃している場合は、お知らせください。

getManagerR :: Handler RepHtml 
getManagerR = do 
    ((res, widget), enctype) <- runFormGet productForm 
    let findTestId = 1 
     res' = prepST res 
     scheduledTest = makeScheduledTest res' 
    dataInsert <- runDB $ insert scheduledTest 
    defaultLayout [whamlet| 
<p>Result:#{show res} 
    <form enctype=#{enctype}> 
     ^{widget} 
|] 



productForm :: Html 
      -> Form Scheduler Scheduler (FormResult SelectedProduct, Widget) 
productForm extra = do 
    pInfo <- liftIO getUIdata 
    let products = V.toList $ V.map productACC $ fst pInfo 
     versions = V.toList $ V.map versionsACC $ snd pInfo 
    (productRes, productView) <- mreq (radioField products) "Placeholder" Nothing 
    versionInfo <- mapM generateVersionSelectFields versions 
    (dateRes, dateView) <- mreq requestedDayField "Schedule" Nothing 

--  (dateRes, dateView) <- mreq (jqueryDayField def 
--       { jdsChangeYear = True 
--       , jdsYearRange = "2011:2012" 
--       }) "Schedule" Nothing 

    let versionRes = map fst versionInfo 
     versionViews = map snd versionInfo 
     widget = do 
      toWidget [whamlet| 
    #{extra} 
<p> 
    ^{fvInput productView} 
    $forall versionView <- versionViews 
     ^{fvInput versionView} 
    ^{fvInput dateView} 
    <input type=submit value="Request Test"> 
|] 

    return (makeSelected productRes versionRes dateRes, widget) 


requestedDayField = checkM checkDateStatus $ (jqueryDayField def 
                { jdsChangeYear = True 
                , jdsYearRange = "2011:2012" 
                }) 

errorMessage :: Text 
errorMessage = "I can't go for that, no can do." 

checkDateStatus date = do 
    maybeTaken <- getBy $ UniqueStartDate date 
    case maybeTaken of 
     Nothing -> return $ Left errorMessage 
     otherwise -> return $ Right date 

答えて

4

getDBの前にrunDBがありません。

関連する問題