如何在 ReasonML 中创建一系列动作中间表达式(并避免创建元组)?

How to create a sequence of actions mid-expression in ReasonML (and avoid creating a tuple)?

如果给定不合适的参数,我想尽早退出函数 Javascript 中的命令式解决方案很优雅:

arg=>{
 if(arg>limit) return 42;
 //perform complex operations
 return x+y
}

作为函数式语言的 ReasonML 没有 return,因此我将所有内容都塞进单个表达式中:

arg=>{
    let helper=()=>{
        //complex operations here
        ; x+y
    }
    (arg>limit) ? 42 : helper()
}

现在,这行得通了,但我不想只返回 42,而是想填充 Js.Log("!CORNER CASE!")。我怎样才能做到这一点?在 C 中,我可以写 (arg>limit) ? (Js_Log("..."),42) : helper(),但在 ReasonML 中,这变成了一个元组,无法编译。

OCaml 可以做到 begin printf "msg" ; 42 end,但分号对我不起作用原因:(Js.log("TEST");42) -- 无法编译!

或者,我需要 ReasonML 中的 K 组合器。

我不明白使用

有什么问题
if (arg > limit) {
  Js_Log("...");
  42
} else {
  //complex operations here
  x + y
}

但如果你绝对必须挤进一个三元条件,你也可以使用花括号在那里形成一个代码块,通常在任何你可以放置表达式的地方:

arg > limit ? {Js.log("..."); 42} : helper()

虽然我通常会认为这是一种代码味道,但对于快速调试来说它会很方便。