OCaml synax中'$'的含义是什么?

时间:2016-05-01 16:39:06

标签: ocaml

我是OCaml的新手。我看到像

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

'$'符号是什么意思?

3 个答案:

答案 0 :(得分:4)

对于$,OCaml中没有预定义的含义。它可以定义为中缀运算符;意思必须来自你正在使用的图书馆。

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

答案 1 :(得分:2)

在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类型的四个参数,给定,a是类型a Term.t的值,b是类型b Term.t的值,等等。通常,这是用于构建类型安全可变参数函数的模式。有关该模式的更多信息,请阅读Applicative Programming with Effects论文。

答案 2 :(得分:1)

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