【发布时间】:2016-08-26 10:22:46
【问题描述】:
我是 OCaml 的新手。我看到了类似的代码
let main_t = Term.(pure main $ address $ port $ pid_file $ log_file $ dbConf)
“$”符号是什么意思?
【问题讨论】:
-
不是语法,它是
cmdliner的一个函数,如果你有梅林那么你可以很容易地检查它的类型。
标签: ocaml
我是 OCaml 的新手。我看到了类似的代码
let main_t = Term.(pure main $ address $ port $ pid_file $ log_file $ dbConf)
“$”符号是什么意思?
【问题讨论】:
cmdliner的一个函数,如果你有梅林那么你可以很容易地检查它的类型。
标签: ocaml
在 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]. *)
And 实际上是apply 函数的中缀形式(在Cmdliner 中命名为app)。它用于累积论点。基本上,pure f $a $b $c $d 形式的构造接受一个函数f,该函数接受a、b、c 和d 类型的四个参数,给定a 是@ 类型的值987654334@、b 是 b Term.t 等类型的值。通常,这是构建类型安全可变参数函数的模式。有关该模式的更多信息,请阅读Applicative Programming with Effects 论文。
【讨论】:
在 OCaml 中,$ 没有预定义的含义。可以定义为中缀运算符;含义必须来自您正在使用的库。
如果我不得不猜测,我会说$ 已被定义为低优先级函数应用运算符。它在 Haskell 中用于此目的,而且通常非常方便。
【讨论】:
$ 不是通常的常规应用程序,<$> 是(应用程序的)函子应用程序吗?
在标准 ocaml 中 $ 没有特殊含义。在您的情况下,这来自可能定义特定语法的 Term 模块。 (顺便说一句,它是哪个模块?-我的意思是你是如何安装它的)
【讨论】: