Если ocaml ожидает, что выражение имеет определенный тип, это потому, что вы выполняете некоторую операцию с этим выражением, которая работает только с этим типом.Таким образом, в этом случае вы, вероятно, сопоставляете шаблон с выражением, используя шаблоны списков (т.е. конструкторы ::
и nil
или списочные литералы, например [x,y,z]
).
Если вы попробуете это с выражением, котороене оценивает список, это, конечно, ошибка, о которой говорит сообщение об ошибке.