我定义了两种记录类型,如下所示:
(* in module A*)
type reg = {name: string; mutable value: Big_int.big_int}
type exp = Reg of reg | Other
(* in module B*)
type abstr = Top | Bot | Elt of int
type register = {name: string; mutable value: abstr}
在模块 B 中,我有一个列表,我称之为l
,exp
并且我正在对其进行模式匹配。所以我有这样的事情:
List.fold_left (fun l elt ->
let str =
match elt with
| A.Reg r -> r.name
| _ -> failwith "exception" in
l@[{name = str; value = Bot}]) [] l
但是我收到以下错误:表达式的类型为 A.reg 但预期为 register 类型。看来模块A中的定义被模块B中的定义隐藏了。如果是,为什么会这样?有人可以解释吗?