Ocaml:错误 - 此表达式的类型为x,但与x类型一起使用

时间:2009-09-30 01:44:28

标签: ocaml tuareg

这是我的错误:

Error: This expression has type nfa but is here used with type nfa

导致这种情况可能会发生什么?我正在使用emacs tuareg,并逐个加载评估文件。有时会发生这种情况,有时则不然。

2 个答案:

答案 0 :(得分:10)

ocaml tutorial中有一个很好的描述。发生了什么事情是你用一个新的定义遮蔽了一个类型定义:

type nfa = int
let f (x: nfa) = x

type nfa = int
let g (x: nfa) = x

重新启动顶级将清除旧的定义。

答案 1 :(得分:0)

<强>更新

自OCaml 4.01.0(2013年9月发布)以来,一般问题是相同的,但是错误消息在类型定义中添加了一个数字,以明确类型在内部的不同。

toplevel 中的old OCaml FAQ的完整示例:

type counter = Counter of int;; (* define a type *)
type counter = Counter of int
# let x = Counter 1;;           (* use the new type *)
val x : counter = Counter 1
type counter = Counter of int;; (* redefine the type, use it *)
type counter = Counter of int
# let incr_counter c = match c with Counter x -> Counter (x + 1);;
val incr_counter : counter -> counter = <fun>
# incr_counter x;;              (* now mix old and new defs *)
Error: This expression has type counter/1029
       but an expression was expected of type counter/1032
#