Также обратите внимание, что вы сталкиваетесь с этой проблемой только при вводе кода в интерактивном режиме F # построчно. Если вы введете первую строку без указания аннотации типов, вы получите сообщение об ошибке:
> let x = ref None;;
// Tests.fsx(1,7): error FS0030: Value restriction.
Однако, если вы введете большую часть кода, которая использует ячейку x
ref (например, присваивает ей значение), тогда F # сможет вывести тип из более поздней части кода, поэтому вы выиграли не нужно никаких аннотаций типа. Например:
> let x = ref None
x := Some(10);;
Это будет работать нормально, потому что F # выведет тип x
из второй строки. Это означает, что вам, вероятно, не понадобятся какие-либо аннотации типов, если вы отправите код в F # в интерактивном режиме для тестирования большими порциями (а в скомпилированном коде F # вы почти никогда не столкнетесь с этой проблемой).