我試圖從Yesod 1.2中使用新的selectRep
函數,但是我無法使json響應正常工作。爲持久實體創建ToJSON實例
instance ToJSON (Entity Feed) where
toJSON (Entity uid (Feed url lastUpdated)) = object
[ "id" .= uid
, "url" .= url
, "lastUpdated" .= lastUpdated
]
getFeedByIdR :: FeedId -> Handler TypedContent
getFeedByIdR feedId = do
feed <- runDB $ get404 feedId
selectRep $ do
provideRep $ return $ toJSON (Entity feedId feed)
我從上面的代碼得到的錯誤是
Handler/Feed.hs:23:31:
Overlapping instances for ToJSON (Entity Feed)
arising from a use of `toJSON'
Matching instances:
instance ToJSON e => ToJSON (Entity e)
-- Defined in `persistent-1.2.0.1:Database.Persist.Class.PersistEntity'
instance ToJSON (Entity Feed) -- Defined at Handler/Feed.hs:5:10
In the second argument of `($)', namely
`toJSON (Entity feedId feed)'
In the second argument of `($)', namely
`return $ toJSON (Entity feedId feed)'
In a stmt of a 'do' block:
provideRep $ return $ toJSON (Entity feedId feed)
看來,持久確實爲ToJSON (Entity e)
here一個實例,但我可以用我的ToJSON (Entity Feed)
不知何故?