![](/img/trans.png)
[英](1, eval)('this') vs eval('this') in 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中产生另一个值,就可以“临时”提取它。 从纯粹的实践角度来看,这就是(可能是)单子论的全部。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.