static LongRange parseEnglishDateRange(S s, DateInterpretationConfig config) {
  new EnglishDateParser parser;
  L<DateStructures.SomeDate> dates = getVars(parser.topDogs(s));
  
  dates = map(d -> new DateStructureToTimestampRange(config).concretizeDate(d), dates);
  print(+dates);
  
  // check for combination of date & time, e.g. "tuesday between 1 and 2 pm"
  if (l(dates) == 2
    && first(dates) instanceof DateStructures.Day
    && !DateStructures.containsDateDates(second(dates))
    && DateStructures.containsTimes(second(dates))) {
    
    DateStructures.Day day = cast first(dates);
    DateStructures.SomeDate combined = cast defaultMetaTransformer().transform(o -> {
      if (o cast DateStructures.Hour)
        o.day = day;
      ret o;
    }, second(dates));
    ret dateStructureToTimestampRange(combined, config);
  }
    
  ret dateStructureToTimestampRange(first(dates), config);
}