我是OCaml的新手。我看到像
这样的代码let main_t = Term.(pure main $ address $ port $ pid_file $ log_file $ dbConf)
'$'符号是什么意思?
答案 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
,它接受a
,b
,c
和d
类型的四个参数,给定,a
是类型a Term.t
的值,b
是类型b Term.t
的值,等等。通常,这是用于构建类型安全可变参数函数的模式。有关该模式的更多信息,请阅读Applicative Programming with Effects论文。
答案 2 :(得分:1)
标准ocaml中没有$的特殊含义。在您的情况下,这来自Term模块,其中可以定义特定语法。 (顺便说一下,它是哪个模块? - 我的意思是你是如何安装它的)