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 -> 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教程。图片中的单子是最简单的,也是我最喜欢的。
相关文章:
- Javascript eval()无法处理传递的字符串
- Semi-sandboxing Javascript eval
- javascript eval方法语法
- JavaScript eval() and const
- mongo javascript --eval is failing
- Javascript eval查询字符串
- javascript eval删除问号后的所有内容
- Javascript eval(0047) returns 39
- Javascript eval - obfuscation?
- JavaScript eval in JavaApplication: "javax.script.scrip
- JavaScript eval(“{}”) 返回行为
- 获取 eval 的“窗口”对象,并列出所有变量?Javascript eval inline html.
- 如何将二进制文字传递给 JavaScript eval
- 你如何让 javascript eval 返回一个字符串而不是一个变量
- Javascript eval() for Json 字符串注入了全局作用域函数
- JavaScript eval() 失败与 window.external.notify(),适用于 window.al
- Javascript eval 在计算数学表达式时,如果使用的数字以 0 开头,则给出错误的输出
- Javascript - eval() `{}` expression
- 如何避免此javascript eval()
- 客户端上用于运行不受信任代码的JavaScript eval()