繁体   English   中英

Haskell,MongoDB,eval JavaScript

[英]Haskell, MongoDB, eval JavaScript

我编写了一种在MongoDB的Haskell驱动程序中使用eval方法执行JavaScript代码的方法。

toolsDB_GenerateID :: Action IO Value
toolsDB_GenerateID = 
        eval (Javascript ([] :: [Field]) "var ret_id = db.counters.findAndModify({query: { _id: \'my_id\' },update: { $inc: { seq: 1 } },new: true}); return {id:ret_id.seq};")::Action IO Value

有用!!!

我在以下使用它:

inserData :: Action IO () 
inserData = do resultEval <-toolsDB_GenerateID 
               insert "test" ["id" =: resultEval]
               liftIO $ return ()

我只是不明白如何从Action IO Value获得真正的Action IO Value

像这样:

Action IO Value -> Value 

要么

Action IO Value -> Int

我该如何释放?

您不能做自己想做的事,但是您不一定需要做。 您可以执行以下操作

foo :: Action IO SomeOtherType
foo = do value <- action -- where action :: Action IO SomeType
      -- here value :: SomeType can be used normally
      ...
      lastAction

唯一的限制是lastAction类型为Action IO SomeOtherType

经验法则是,您不能永远从monad中提取值,但是只要最终在同一monad中产生另一个值,就可以“临时”提取它。 从纯粹的实践角度来看,这就是(可能是)单子论的全部。

我建议您阅读一些monad教程。 图片中的Monad最简单,也是我的最爱之一。 LYAH中的一个也不错,而且内容丰富。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM