Pattern matching 同一类型的多个名称,并在Ocaml中匹配

Pattern matching 同一类型的多个名称,并在Ocaml中匹配,pattern-matching,ocaml,type-inference,Pattern Matching,Ocaml,Type Inference,我试图使用这个库匹配不同的人脸组合(根据双图理论) 这样做的功能之一应该如下所示: let type_of_edge (edge:Link.edg) = let {Link.i; _;} = edge in match i with | Link.Face.empty -> "777" | _ -> "888" 不幸的是,我遇到以下错误: 此模式与“a列表”类型的值匹配 但需要一个模式,该模式与t类型的值相匹配 我知道在模块Link.Face中,每个对象都是名为“

我试图使用这个库匹配不同的人脸组合(根据双图理论)

这样做的功能之一应该如下所示:

let type_of_edge (edge:Link.edg) = 
 let {Link.i; _;} = edge
 in
  match i with
  | Link.Face.empty -> "777"
  | _ -> "888"
不幸的是,我遇到以下错误:

此模式与“a列表”类型的值匹配 但需要一个模式,该模式与t类型的值相匹配


我知道在模块Link.Face中,每个对象都是名为“t”的类型,但为什么如果我使用该模块中的一个函数(Link.Face.empty),编译器会将其视为“列表类型”

所以我的问题的答案显然是:

let type_of_edge (edge:Link.edg) = 
 let {Link.i; _;} = edge
 in
  match i with
  | tmp when tmp = Link.Face.empty -> "777"
  | _ -> "888"
我发现 对解决这个问题很有帮助