date = seq(/[0-9]{4}/.r, /[0-9]{2}/.r, /[0-9]{2}/.r) do |(yy, mm, dd)|
          { year: yy, month: mm, day: dd }
        end | seq(/[0-9]{4}/.r << "-".r, /[0-9]{2}/.r) do |(yy, dd)|
          { year: yy, day: dd }
        end | /[0-9]{4}/.r do |yy|