“$”在 OCaml 语法中是什么意思?

what does '$' mean in OCaml synax?

我是 OCaml 新手。我看到类似

的代码
let main_t = Term.(pure main $ address $ port $ pid_file $ log_file $ dbConf)

“$”符号是什么意思?

$在标准ocaml中没有特殊含义。在您的情况下,这来自可以定义特定语法的 Term 模块。 (顺便说一句,它是哪个模块?-我的意思是你是如何安装它的)

$ 在 OCaml 中没有预定义的含义。它可以定义为中缀运算符;含义必须来自您正在使用的库。

如果非要我猜的话,我会说 $ 已被定义为低优先级函数应用程序运算符。它在 Haskell 中用于此目的,而且通常非常方便。

在 OCaml 中,可以定义您自己的中缀和前缀运算符。在 cmdliner 库中,运算符 $ 定义为:

  val ( $ ) : ('a -> 'b) t -> 'a t -> 'b t
  (** [f $ v] is a term that evaluates to the result of applying
      the evaluation of [v] to the one of [f]. *)

实际上是apply函数的中缀形式(在Cmdliner中命名为app)。它用于累积参数。基本上,pure f $a $b $c $d 形式的构造接受一个函数 f,该函数采用 abcd 类型的四个参数,假设 aa Term.t 类型的值,bb Term.t 类型的值,等等。一般来说,这是构建类型安全可变参数函数的模式。有关模式的更多信息,请阅读 Applicative Programming with Effects 论文。