func processPitches(v types.Value) (pitches []PitchDef) { switch v := v.(type) { case types.List: for i := uint64(0); i < v.Len(); i++ { pitches = append(pitches, processPitches(v.Get(i))...) } case MapOfStringToValue: if checkPitch(v) { pitches = append(pitches, getPitch(v)) } case nil: return // Yes, an at-bat can end with no pitches thrown. default: d.Chk.Fail("Impossible pitch", "No pitch should be %+v, which is of type %s!\n", v, reflect.TypeOf(v).String()) } return }