- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个模块 MyMonad
提供绑定(bind)函数为(let*)
运算符,也可作为 >>=
旧式代码的运算符。
这个想法是旧代码可以将其用作:
let foobar () =
let open MyMonad in
foo "test" >>= fun s ->
bar s 1 >>= fun (a, b) ->
return a + b
并且在 OCaml >= 4.08 上编译的新代码可以将其用作:
let foobar () =
let open MyMonad in
let* s = foo "test" in
let* a, b = bar s 1 in
return a + b
模块内部
MyMonad.ml
,这些运算符以直接的方式实现:
let (>>=) a f =
...
let (let*) = (>>=)
但是,在 OCaml <= 4.07 上,最后一行是语法错误。
val (let*) : ...
也是如此。
MyMonad.mli
中的行接口(interface)文件。
(let*)
在另一个之上并被旧编译器排除在外。但我想知道是否有更优雅的解决方案。
最佳答案
要自己回答这个问题,确实需要坚持>>=
。 , 新语法可以通过 使用垫片 使用旧的 OCaml 编译器,甚至是 BuckleScript(现在是 ReScript)。
后者可以如下实现:
opam switch create -wy --no-install . 4.06.0
ocaml-syntax-shims
OPAM 包:opam install -wy ocaml-syntax-shims
bsconfig.json
配置文件:{
"pp-flags": "./_opam/bin/ocaml-syntax-shims -dump-ast",
...
}
关于operators - 如何 optional 地提供 OCaml (let*) 运算符以与新旧编译器一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66256575/
在什么情况下我们应该在 JDK 8 中使用旧的 foreach 循环遍历新的 collection.forEach() 还是最好的做法是转换 every foreach 循环?是否存在任何重要的性能差
我想使用新的 CoraData 模型创建应用程序的新版本(由其他人创建)。我的疑问是:核心数据模型通过更新是永久的。我想确保以前的 CoreData 模型不会对新版本的应用程序产生问题。 我必须遵循一
我正在阅读“Dennis Ritchie 的 C 编程语言”,并且在一开始它演示了一个代码,即以下 #include main() { printf("Hello, World"); } 根据本书,这
首先,我知道这个问题在过去几年中在 Stack Overflow 上被提出过几次。问题是有时我会收到新的 PayPal 结帐页面,有时会收到旧页面。 我在沙盒中创建了两个测试帐户。第一个采用新设计,第
我在同一 Google Analytics(分析)帐户中有多个配置文件,但我发现新创建的配置文件的跟踪代码不同。它们会影响跟踪功能吗? 旧代码: var _gaq = _gaq || [];
我是一名优秀的程序员,十分优秀!