Yesod 持久代码的类型类约束
Posted
技术标签:
【中文标题】Yesod 持久代码的类型类约束【英文标题】:Typeclass constraint for Yesod Persistent code 【发布时间】:2013-12-08 14:54:43 【问题描述】:我试图了解对于想要将代码放入数据库中并在 Yesod 中具有持久性的函数使用什么正确的类型类约束。为了使事情具体化,我有一个类似的功能:
addToDbReturnJson obj = do
runDB $ insert obj
returnJson obj
我试图弄清楚它的类型签名应该是什么。我很确定它应该是这样的
addToDBReturnJson :: (ToJSON val, SomethingPersist val) => val -> 处理程序值
SomethingPersist
应该是什么?我很高兴看到解释 Persistent 类型的文档,但我无法从 Yesod 书中弄清楚。
【问题讨论】:
不要签名。编译器足够聪明,可以为您推断。 在 ghci 中加载这个文件,调用:t addToDbReturnJson
看看编译器为你推断了什么
是的,我目前没有类型签名并且它可以工作,但我喜欢尝试理解我的代码类型(加上摆脱编译器警告)。我已经尝试过 ghci,它给了我一个我无法理解的 8 行内容。
【参考方案1】:
这对我有用-
addToDbReturnJson::(ToJSON val, PersistEntity val,
(PersistEntityBackend val ~ PersistMonadBackend (YesodDB App)))=>val->Handler Value
不是很直观,但在我看来,在最后一部分中,您必须指定输入值连接到的数据库与处理程序使用的数据库相同(......好吧,这很有意义,我猜)。
【讨论】:
以上是关于Yesod 持久代码的类型类约束的主要内容,如果未能解决你的问题,请参考以下文章