【问题标题】:what does '$' mean in OCaml synax?'$' 在 OCaml 语法中是什么意思?
【发布时间】:2016-08-26 10:22:46
【问题描述】:

我是 OCaml 的新手。我看到了类似的代码

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

“$”符号是什么意思?

【问题讨论】:

标签: ocaml


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 是的,这里看起来像函子应用程序。但是 Haskell 中的 $ 不是通常的常规应用程序,<$> 是(应用程序的)函子应用程序吗?
    • 毫无疑问你是对的,我忘记了我以前对 Applicative 的了解 :-)
    【解决方案3】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2023-04-10
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多