Вы пишете код F # в синтаксисе Haskell.Причина, по которой ваш код компилируется, заключается в том, что компилятор F # думал, что есть две loop
функции, где первая скрывается за второй.Очевидно, что в первой функции loop
сопоставление с образцом завершается неудачно с любым целым числом, отличным от 0
для первого параметра и None
для второго параметра.
Объявление, близкое к синтаксису Haskell, может быть:
let rec loop = function
| 0, Some ex -> raise ex
| n, maybeEx -> try f() with ex -> loop (n-1, Some ex)
loop(max, None)