RethinkDB:​​将ReQL转换为Integer类型

时间:2015-07-02 06:29:33

标签: haskell rethinkdb

无法弄清楚如何将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类型?

由于

1 个答案:

答案 0 :(得分:2)

您可以按照WriteResponse

中的示例使用docs for insert结果实例
res <- runDB $ table "articles" # insert doc
if writeResponseErrors res == 0

R。!运算符用于构建 ReQL 类型的查询,而不是用于检查结果。