Dictionary 为什么我的地图类型没有按原因导出?

Dictionary 为什么我的地图类型没有按原因导出?,dictionary,module,ocaml,reason,reasonml,Dictionary,Module,Ocaml,Reason,Reasonml,接下来,我创建了一个文件(以及相应的模块),该文件定义了一个具体的Map类型: /* Scores.re */ module StringMap = Map.Make({ type t = string; let compare = compare }); type scores = StringMap.t(int); 现在,我想在另一个文件中使用该类型: /* Demo.re */ let currentScores = Scores.scores.empty; Js.log(c

接下来,我创建了一个文件(以及相应的模块),该文件定义了一个具体的
Map
类型:

/* Scores.re */
module StringMap = Map.Make({
  type t = string;
  let compare = compare
});

type scores = StringMap.t(int);
现在,我想在另一个文件中使用该类型:

/* Demo.re */
let currentScores = Scores.scores.empty;

Js.log(currentScores);
但是,这给了我一个错误:

The value scores can't be found in Scores
如果我添加一个常量(例如,
let n=123;
Js.log(Scores.n);
),那么它就工作了


我在这里遗漏了什么?

分数
是一种类型,而类型,甚至记录类型,在类型本身上都没有字段。此外,类型和值位于不同的名称空间中,因此当
scores
类型存在时,
scores
值不存在,因此出现错误“在scores中找不到值scores”

另一方面,模块可以有“字段”,这就是它存在的原因。当然,您也可以使用与对
分数进行别名相同的方式来别名
empty
。t
键入:

type scores = StringMap.t(int);
let empty = StringMap.empty;

最后,您会问“确定要创建一个映射实例,密钥类型必须是已知的吗?”。确实是这样,你已经把它公之于众了。创建
StringMap
模块(
Map.Make({type t=string;…0);
)时指定了键类型。不需要指定值类型(
int
)但是,这是可以推断的。

结果是
空的
存在于
StringMap
上,而不是
分数
。不过我觉得这很奇怪。当然要创建
映射
实例,必须知道键类型吗?