Ranges are a struct, so it's strange that it would show up so high in the GC stats:

Taking a look, this is mostly due to equality comparisons:

Range is compared all over the place with = and <>. This actually leads towards GenericEqualityIntrinsic, which causes boxing:
https://github.com/Microsoft/visualfsharp/blob/32251218913b82390b6b11e374ea5ac84c2c56ad/src/fsharp/FSharp.Core/prim-types.fs#L1539-L1540
And this leads to lots of heap allocations.