Function “如何修复”;模式匹配并非详尽无遗;,

Function “如何修复”;模式匹配并非详尽无遗;,,function,functional-programming,ocaml,Function,Functional Programming,Ocaml,我想写一个函数,它将添加两个eval类型的元素 type eval = Num of float | Neg | Add | Sub | Mul | Div;; OCaml编译器给了我这个警告,但我不知道它到底想要什么。它是有效的,但我想在没有这个警告的情况下实现它 # let (+++) (Num a) (Num b) = match (Num a), (Num b) with | (Add|Neg|Sub|Mul|Div), _ -> failwith "01" | _,

我想写一个函数,它将添加两个eval类型的元素

type eval = Num of float | Neg | Add | Sub | Mul | Div;;
OCaml编译器给了我这个警告,但我不知道它到底想要什么。它是有效的,但我想在没有这个警告的情况下实现它

# let (+++) (Num a) (Num b) =
  match (Num a), (Num b) with
  | (Add|Neg|Sub|Mul|Div), _ -> failwith "01"
  | _, (Add|Neg|Sub|Mul|Div) -> failwith "02"
  | _, _ -> Num (a +. b)
  ;;        
Warning 8: this pattern-matching is not exhaustive.
Here is an example of a case that is not matched:
(Neg|Add|Sub|Mul|Div)
Warning 8: this pattern-matching is not exhaustive.
Here is an example of a case that is not matched:
(Neg|Add|Sub|Mul|Div)
val ( +++ ) : eval -> eval -> eval = <fun>
#let(++++)(Num a)(Num b)=
将(数量a)、(数量b)与
|(将| Neg | Sub | Mul | Div)添加到->failwith“01”
||(添加| Neg | Sub | Mul | Div)->带“02”的故障
|_u,u->Num(a+.b)
;;        
警告8:此模式匹配并非详尽无遗。
以下是一个不匹配的案例示例:
(负添加子分区)
警告8:此模式匹配并非详尽无遗。
以下是一个不匹配的案例示例:
(负添加子分区)
val(+++):eval->eval->eval=

非详尽模式如下:

 let (+++) (Num a) (Num b) = ...
使用这些模式,您可以假设
++
的参数始终是
Num
形式,而不在类型系统中强制执行它。 如果要消除警告,应展开模式匹配以捕获所有其他情况:

 let (+++) x y = match x, y with 
 | ...

非详尽模式如下所示:

 let (+++) (Num a) (Num b) = ...
使用这些模式,您可以假设
++
的参数始终是
Num
形式,而不在类型系统中强制执行它。 如果要消除警告,应展开模式匹配以捕获所有其他情况:

 let (+++) x y = match x, y with 
 | ...

尝试使用
Num
以外的任何函数调用
++
函数。您的
failwith“01”
failwith“02”
案例将永远无法到达。请尝试使用
Num
以外的任何命令调用您的
++
函数。您的
failwith“01”
failwith“02”
案例将永远无法到达。