The laps grouped by type, then name; null when no lap has a type or a
name. Types come in the order the session first reaches them (warm-up,
reps and recoveries, cool-down), laps with no type last. A type whose laps
share one name is one group carrying that name; one with several names
gets a heading and a group per name, shortest laps first (first-seen order
when any name's laps have no distance). Throws a RangeError when two laps
end up with the same id.
The laps grouped by type, then name; null when no lap has a type or a name. Types come in the order the session first reaches them (warm-up, reps and recoveries, cool-down), laps with no type last. A type whose laps share one name is one group carrying that name; one with several names gets a heading and a group per name, shortest laps first (first-seen order when any name's laps have no distance). Throws a RangeError when two laps end up with the same id.