Насколько мне известно, вы не можете напрямую устанавливать границы для значений (если кто-то другой знает иначе, пожалуйста, сообщите нам об этом).Я думаю , что называется "зависимыми типами", которые я не верю, что F # поддерживает, по крайней мере, в настоящее время.
Я предполагаю, что вы уже хорошо знаетениже, но для того, чтобы кто-нибудь еще взглянул, я расскажу, как вы могли бы справиться с этим во время выполнения: я полагаю, что самый простой способ сделать это, по сути, состоит в том, чтобы сделать тип закрытым и предоставить только функцию getFoo, которая выполняетПользовательская проверка в то время.В зависимости от того, что вы хотите, вы можете либо обернуть его в опцию, либо выдать исключение, если передан неправильный номер. Например:
type private FooWithException =
| Foo of uint64
let getFooWithException (x: uint64) =
if x = 0 then
failwith "x was zero"
else
Foo x
или
type private FooOption =
| Foo of uint64 option
let tryGetFoo (x: uint64) =
if x = 0UL then
None
else
Some(x)
Вы также можете найти эта страница на F # для Fun и Profit полезна.