Я немного подробнее расскажу о вашем (совершенно прекрасном) самоответе для будущих читателей.
В OCaml ключевое слово function
добавляет анонимный параметр в функцию, которая используется в шаблоне.соответствия.Другими словами, ваша первая попытка
let rec fibo n = function
| 0 -> 1
| 1 -> 1
| _ -> fibo (n - 1) + fibo (n - 2);;
эквивалентна
let rec fibo n m =
match m with
| 0 -> 1
| 1 -> 1
| _ -> fibo (n - 1) + fibo (n - 2);;
, которая не относится к типу.
Вы можете прочитать больше о function
ключевое слово в Реальный мир OCaml .