ocaml type missmatch unit vs list

时间:2018-05-05 16:54:34

标签: ocaml typechecking

签名

val chooser: string list * string list -> string list

和这个实现

 let rec chooser (inputList, trueList) = match inputList with
      [] -> []
    | iH::iT -> if (List.hd trueList)="True" 
        then iH::(chooser iT List.tl trueList)

我收到以下错误:

错误:此变体表达式应具有类型单位 构造函数::不属于单位

我做错了什么?

2 个答案:

答案 0 :(得分:1)

else部分没有明确定义 - 所以当条件不满足时,else部分是()(即单位)。 编译器将iH::(chooser iT List.tl trueList)标记为unit,但情况并非如此:

 if cond
    then A
    else B

AB具有相同的类型。

答案 1 :(得分:1)

if ... then没有else的结果必须是unit,因为当值为()时,unit的值为else表达是错误的。

换句话说,您if需要implementation 'com.android.support:design:27.1.1' 部分才能获得所需类型。当比较为假时,该值应该是多少?