Я думаю, что результат, который вы получите, на самом деле не содержит пустую строку, а вместо этого содержит строку с невидимым символом.
Чтобы проверить это, вы можете попробовать выполнить следующее:
let gen =
Arb.generate<string>
|> Gen.filter(fun (x) -> x<>null && x <>""&& x<>" ")|>Gen.nonEmptyListOf
let res = Gen.eval 1000 (Random.mkStdGen(42L)) gen
Используя 42
в качестве начального числа, я получаю строковое значение со смещением 80, которое отображается как ""
,но на самом деле это невидимый персонаж.Вот интерактивная сессия F #:
> res.[80];;
val it : string = ""
> res.[80].ToCharArray();;
val it : char [] = [|'\014'|]