我是Yesod Haskell的新手,我非常喜欢它,但是我必须在一个月之后离开它,因为我无法解决这个问题: 我有版本yesod-core版本:1.0.1.3 我按照这个例子: More Client Side Yesod: todo sample 我可以创建自己的页面并通过json填充数据 在我使用json添加新记录后 但我无法删除或更改记录,因为我找不到恢复密钥的方法。 我不能使用这个系统来推导数据,如下所述:Parsing a JSON post和 Correct way to do a “join” in persist with yesod和aeson-0.6.0.2: Fast JSON parsing and encoding因为我总是收到此错误:
Exception when trying to run compile-time code:
Data.Aeson.TH.withType: Unsupported type: TySynD Model.Elarticoli [] (AppT (ConT Model.ElarticoliGeneric) (ConT Database.MongoDB.Query.Action))
Code: deriveFromJSON (id) ''Elarticoli
如果我使用这个系统:
Elarticoli
marca Text
descrizione Text
idum Int
prezzo Double
instance FromJSON (Key id Elarticoli) where
parseJSON = fmap Key . parseJSON
instance FromJSON Elarticoli where
parseJSON (Object v) = Elarticoli
<$> v .: "marca"
<*> v .: "descrizione"
<*> v .: "idum"
<*> v .: "prezzo"
parseJSON _ = fail "Invalid Elarticoli"
postAeldatidelR :: Handler ()
postAeldatidelR = do
id <- parseJsonBody_
runDB (delete id)
sendResponseStatus status204 ()
我总是收到这个错误:
Handler/Aeldati.hs:72:12:
Ambiguous type variable `val0' in the constraint:
(PersistEntity val0) arising from a use of `delete'
Probable fix: add a type signature that fixes these type variable(s)
In the first argument of `runDB', namely `(delete id)'
In a stmt of a 'do' block: runDB (delete id)
In the expression:
do { id <- parseJsonBody_;
runDB (delete id);
sendResponseStatus status204 () }
对于持久性我使用MongoDB。 我将不得不回到Java工作?谢谢你的帮助。
答案 0 :(得分:1)
问题是GHC无法知道id
函数中postAeldatidelR
的类型。 parseJsonBody_
表示它必须是FromJSON
的实例。 delete
表示它必须是PersistEntity
的实例。但是可能有数百个实例可以匹配。
在这样的时代,最简单的解决方案是提供显式类型签名。也许这会奏效:
haskell
runDB (delete (id :: ElarticoliId))