Reason 中的 .() 和 .{} 有什么区别?

What is the difference between .() and .{} in Reason?

我想弄清楚为什么使用 Js.Promise 的示例使用

Js.Promise.(
    ...
)

Json.Decode 的示例使用

Json.Decode.{
    ...
}

据我了解,.() 打开了 Js.Promise,这样我就可以调用 Js.Promise 中的任何函数,而不必将 Js.Promise 作为模块前缀。

但是 .{} 是做什么的?

两者都将一些模块声明放在范围内,但是 .{} 创建记录,而 .() 包装表达式。

记录:

let point = json =>
  Json.Decode.{
    x: json |> field("x", float),
    y: json |> field("y", float)
  };

相当于:

let point = json =>
  {
    x: json |> Json.Decode.field("x", Json.Decode.float),
    y: json |> Json.Decode.field("y", Json.Decode.float)
  };

同样,对于表达式:

let _ =
  Js.Promise.(then_(value => resolve(Js.log(value)), okPromise));

相当于:

let _ =
  Js.Promise.then_(value => Js.Promise.resolve(Js.log(value)), okPromise));