Если у меня есть функция, определенная как
let test = function
| [] -> None
| head::tail -> Some(head)
fsi позволит мне определить это, и компиляция скомпилирует это; но это упадет, если я когда-нибудь попытаюсь сделать test []
.
Теперь я знаю причину: когда я даю ему пустой набор, он не может вывести тип, и поэтому универсальная функция дает сбой, но разве она не может сделать что-то более умное? (по типу «я не знаю тип 'a
, но в этом случае я не использую 'a
, поэтому я позволю это».)
В любом случае, можно ли как-нибудь избежать этой проблемы?