F# chunk a sequence into fixed-size lists
F#
let chunk (size: int) (source: seq<'T>) : seq<'T list> =
if size <= 0 then invalidArg "size" "chunk size must be positive"
seq {
let batch = ResizeArray<'T>()
for item in source do
batch.Add item
if batch.Count = size then
yield List.ofSeq batch
batch.Clear()
if batch.Count > 0 then yield List.ofSeq batch
}
let firstThree = chunk 3 [ 1 .. 7 ] |> Seq.head