无法弄清楚如何将reql转换为类型
我插入一个文档并将结果返回到一个带有"错误的对象"键。我只需要看看它是否为0?
这样一个简单的函数:
savePerson :: Handler ()
savePerson = do
let load = fromJust . extract ["data", "attributes"]
doc <- load <$> jsonBody'
res <- runDB $ table "articles" # insert doc
if (res R.! "errors") == 0
then setStatus status204
else setStatus status500
这绝对没有编译,但它给出了我想要的例子。 我需要将reql转换为Integer进行比较。 如何将类型从reql转换为haskell类型?
由于
修改
不提供某些数据类型的道歉。
import Web.Spock (runQuery)
import Database.RethinkDB.NoClash
runDB :: (Result a, Expr q) => q -> Handler a
runDB act = runQuery $ \hdl -> run hdl act
runDB' :: Expr q => q -> Handler Datum
runDB' act = runQuery $ \hdl -> run' hdl act
EDIT2
感谢AtnNn
获得第一个示例的答案。但我仍然无法弄清楚ReQL转换。这是我的坏我无法想出一个好榜样。我会尝试另一个。
我简单地得到一些json,用Aeson
构造响应json并将其发送回去除id
属性
fetchPerson :: Text -> Handler ()
fetchPerson oid = do
res <- runDB' $ table "articles" # get (expr oid)
json $ object [
"data" .= [
"type" .= ("articles"::Text),
"id" .= oid,
"attributes" .= (res # without ["id"])
]
]
现在,(res # without ["id"])
仍然给我ReQL,对吗?我需要将其转换为ToJSON
实例或Aeson Value
类型的类型。
我该怎么做?我如何将ReQL转换为haskell类型?
由于
答案 0 :(得分:2)
您可以按照WriteResponse
中的示例使用docs for insert的结果实例res <- runDB $ table "articles" # insert doc
if writeResponseErrors res == 0
R。!运算符用于构建 ReQL 类型的查询,而不是用于检查结果。