检查操作员|>;在OCaml中';什么是顶级?

检查操作员|>;在OCaml中';什么是顶级?,ocaml,Ocaml,我想查看操作符的类型|>,它当然被定义为let |>xf=fx 使用其他操作符,如+,我可以简单地点击(+)顶层会告诉我它是-:int->int->int= 但是有了|>,它说: 错误:失败:“|>必须应用于两个参数” 我的问题是,如何在OCaml的顶级中检查操作符|> 附加: 嗯。现在我知道这和核心有关。如果我直接给它下定义,它就可以了。但在核心环境中,它只是中断 这是我的.ocamlinit: (* Added by OPAM. *) let () = try Topdirs.dir_

我想查看操作符的类型
|>
,它当然被定义为
let |>xf=fx

使用其他操作符,如
+
,我可以简单地点击
(+)顶层会告诉我它是
-:int->int->int=

但是有了
|>
,它说:

错误:失败:“|>必须应用于两个参数”

我的问题是,如何在OCaml的顶级中检查操作符
|>

附加:

嗯。现在我知道这和核心有关。如果我直接给它下定义,它就可以了。但在核心环境中,它只是中断

这是我的
.ocamlinit

(* Added by OPAM. *)
let () =
  try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH")
  with Not_found -> ()
;;

#use "topfind";;
#thread;;
#camlp4o;;
#require "core.top";;
#require "core.syntax";;
open Core.Std;;

它对我有用。下面是完整的命令行会话:

$ ocaml
        OCaml version 4.01.0

#  let (|>) x f = f x;;
val ( |> ) : 'a -> ('a -> 'b) -> 'b = <fun>
# (|>);;
- : 'a -> ('a -> 'b) -> 'b = <fun>
#
$ocaml
OCaml版本4.01.0
#设(|>)xf=fx;;
val(|>):'a->('a->'b)->'b=
# (|>);;
-:'a->('a->'b)->'b=
#
更新


(帕斯卡·库克(Pascal Cuoq)在下面的评论中显然给出了正确的答案。:-

这对我很有用。下面是完整的命令行会话:

$ ocaml
        OCaml version 4.01.0

#  let (|>) x f = f x;;
val ( |> ) : 'a -> ('a -> 'b) -> 'b = <fun>
# (|>);;
- : 'a -> ('a -> 'b) -> 'b = <fun>
#
$ocaml
OCaml版本4.01.0
#设(|>)xf=fx;;
val(|>):'a->('a->'b)->'b=
# (|>);;
-:'a->('a->'b)->'b=
#
更新


(帕斯卡·库克(Pascal Cuoq)在下面的评论中显然给出了正确的答案。:-

这对我很有用。下面是完整的命令行会话:

$ ocaml
        OCaml version 4.01.0

#  let (|>) x f = f x;;
val ( |> ) : 'a -> ('a -> 'b) -> 'b = <fun>
# (|>);;
- : 'a -> ('a -> 'b) -> 'b = <fun>
#
$ocaml
OCaml版本4.01.0
#设(|>)xf=fx;;
val(|>):'a->('a->'b)->'b=
# (|>);;
-:'a->('a->'b)->'b=
#
更新


(帕斯卡·库克(Pascal Cuoq)在下面的评论中显然给出了正确的答案。:-

这对我很有用。下面是完整的命令行会话:

$ ocaml
        OCaml version 4.01.0

#  let (|>) x f = f x;;
val ( |> ) : 'a -> ('a -> 'b) -> 'b = <fun>
# (|>);;
- : 'a -> ('a -> 'b) -> 'b = <fun>
#
$ocaml
OCaml版本4.01.0
#设(|>)xf=fx;;
val(|>):'a->('a->'b)->'b=
# (|>);;
-:'a->('a->'b)->'b=
#
更新



(帕斯卡·库克在下面的评论中显然给出了正确的答案。:-

什么?。。。你对环境有什么特别的看法吗?@KevinLee Jeffrey给出的定义
let(|>)xf=fx
可能效率很低。很可能在核心/utop环境中,
e1 |>e2
被定义为语法规则,将立即转换为
e2e1
。这就解释了为什么
(>)是一个语法错误。@PascalCuoq谢谢!这让我想起了一些事情。难怪它需要
camlp4o
a->('a->'b)->'b=@PascalCuoq好吧,只是|>已经在渗透词中被定义了(我猜)。不需要手工定义。显然,它还经过优化,以消除编写标准函数应用程序的任何开销。什么?。。。你对环境有什么特别的看法吗?@KevinLee Jeffrey给出的定义
let(|>)xf=fx
可能效率很低。很可能在核心/utop环境中,
e1 |>e2
被定义为语法规则,将立即转换为
e2e1
。这就解释了为什么
(>)是一个语法错误。@PascalCuoq谢谢!这让我想起了一些事情。难怪它需要
camlp4o
a->('a->'b)->'b=@PascalCuoq好吧,只是|>已经在渗透词中被定义了(我猜)。不需要手工定义。显然,它还经过优化,以消除编写标准函数应用程序的任何开销。什么?。。。你对环境有什么特别的看法吗?@KevinLee Jeffrey给出的定义
let(|>)xf=fx
可能效率很低。很可能在核心/utop环境中,
e1 |>e2
被定义为语法规则,将立即转换为
e2e1
。这就解释了为什么
(>)是一个语法错误。@PascalCuoq谢谢!这让我想起了一些事情。难怪它需要
camlp4o
a->('a->'b)->'b=@PascalCuoq好吧,只是|>已经在渗透词中被定义了(我猜)。不需要手工定义。显然,它还经过优化,以消除编写标准函数应用程序的任何开销。什么?。。。你对环境有什么特别的看法吗?@KevinLee Jeffrey给出的定义
let(|>)xf=fx
可能效率很低。很可能在核心/utop环境中,
e1 |>e2
被定义为语法规则,将立即转换为
e2e1
。这就解释了为什么
(>)是一个语法错误。@PascalCuoq谢谢!这让我想起了一些事情。难怪它需要
camlp4o
a->('a->'b)->'b=@PascalCuoq好吧,只是|>已经在渗透词中被定义了(我猜)。不需要手工定义。显然,它还进行了优化,以消除编写标准函数应用程序的任何开销。