Haskell - 无法将类型'PersistEntityBackend record0'与'SqlBackend'匹配

时间:2017-04-01 18:29:07

标签: haskell yesod haskell-persistent

我想在Yesod中通过id获取记录。我的代码是:

getEditActorR :: Handler Html
getEditActorR = do
    actorId <- runInputGet $ ireq intField "id"
    actor <- runDB $ get $ Key $ PersistInt64 (fromIntegral actorId)
    defaultLayout $ do
        $(widgetFile "actor-edit")

我得到的错误是:

• Couldn't match type ‘PersistEntityBackend record0’
                 with ‘SqlBackend’
    arising from a use of ‘get’
  The type variable ‘record0’ is ambiguous
• In the second argument of ‘($)’, namely
    ‘get $ Key $ PersistInt64 (fromIntegral actorId)’
  In a stmt of a 'do' block:
    actor <- runDB $ get $ Key $ PersistInt64 (fromIntegral actorId)
  In the expression:
    do { actorId <- runInputGet $ ireq intField "id";
         actor <- runDB $ get $ Key $ PersistInt64 (fromIntegral actorId);
         defaultLayout $ do { (do { ... }) } }

我该如何解决?

1 个答案:

答案 0 :(得分:3)

我做的第一件事就是运行stack ghci

然后我运行:info Actor,其中Actor是我的PersistEntity的名称。

除此之外,还有:

newtype instance Key Actor = ActorKey {unActorKey :: Int}

所以我写道:

maybeActor <- runDB $ get $ ActorKey actorId
case maybeActor of
    Just actor -> defaultLayout $ do
        $(widgetFile "actor-edit")
    Nothing -> defaultLayout $ do
        $(widgetFile "actor-new")