在 ghci 中,您可以使用 type directive 找出任何表达式的类型。 .
例如,如果我想找出 \ f g h -> g (h f)
的类型,我可以像这样在 ghci 解释器中使用指令:
Prelude> :t \ f g h -> g (h f)
\ f g h -> g (h f) :: t2 -> (t1 -> t) -> (t2 -> t1) -> t
OCaml 是否有类似的功能?
最佳答案
您可以找到 utop顶层对此有用。它是标准 OCaml 顶层的增强版本,但具有:
有两种方法可以找到某物的类型。对于一个值,只需将表达式输入到顶层:
$ utop
# let x = 1 ;;
val x : int = 1
# x ;;
- : int = 1
这适用于值,但不适用于类型定义。 utop (1.7+) 也有
#typeof
不过,可以为您打印出来的指令。$ utop
# #typeof Unix.sockaddr
type Unix.sockaddr = ADDR_UNIX of string | ADDR_INET of Unix.inet_addr * int
# #typeof ref
type 'a Pervasives.ref = { mutable contents : 'a; }
(最后一个告诉你
ref
引用类型只是具有单个可变 contents
字段的字段的语法糖)。快速转储模块定义的另一个常见技巧是将其别名为新模块。
$ utop
# module L = List ;;
module L : sig
val hd : 'a list -> 'a
val tl : 'a list -> 'a list
val nth : 'a list -> int -> 'a
<etc>
您可以通过
opam install utop
快速安装utop .我们在 Real World OCaml 中推荐它作为新手的首选交互式编辑器,而不是普通的 OCaml 顶层。
关于haskell - OCaml 中的 ghci 类型指令的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19355954/