我构建了一个互相递归类型,由更多原始类型组成,类型如下:
type Title = Title of string;;
type Value = Value of int;;
type Subcol = Collection list
and Collection =
| Col of Title * Value * Subcol
;;
subcol可能是也可能不是空列表,但如果不是,我想将给定集合的值和Subcol的递归调用以及它可能包含的Value defs相加。为此,我构建了以下函数:
let rec colList = function
| [] -> 0
| _::v::s -> (colList s) + sumVal v
and sumVal = function
| Value v -> v
and col = function
| Col(_,v,[]) -> (sumVal v)
| Col(_,v,s) -> (sumVal v) + (colList s)
;;
我希望函数在
中调用colListCol(_,i,s) -> (sumVal i) + (colList s)
从Subcol类型生成int,但是我收到以下错误:
错误FS0001:类型不匹配。期待一个 值列表但给出了一个 Subcol“Value”类型与“Collection”类型
不匹配
我希望colList接受Subcols,而不是Value list。
感谢任何帮助,谢谢。