Чтобы устранить проблему в исходном подходе, вам нужно использовать Seq.append
вместо Seq.concat
.Начальное значение для fold
должно быть пустой последовательностью, которая может быть записана как Seq.empty
:
let res =
files |> Seq.fold(fun x item ->
let lines = FileEnumerator(item)
let sq = Seq.append x lines
sq ) Seq.empty
Если вы хотите использовать Seq.concat
, вам нужно будет написать Seq.concat [x; lines]
,потому что concat
ожидает, что последовательность последовательностей будет сцеплена.С другой стороны, append
просто принимает две последовательности, поэтому здесь проще использовать.
Другой (более простой) способ объединения всех строк - это использование yield!
в выражениях последовательности:
let res =
seq { for item in files do
yield! FileEnumerator(item) }
Это создает последовательность путем перебора всех файлов и добавления всех строк из файлов (по порядку) в результирующую последовательность.Конструкция yield!
добавляет все элементы последовательности к результату.