// returns (number of list elements matched, index in element, index in string)
static T3<Int> matchStringListWithStringIC(LS list, S string) {
  int iList = 0, iElement = 0, iString = 0;
  S element = first(list);
  while (element != null && iString < l(string)) {
    if (iElement >= l(element)) {
      element = get(list, ++iList);
      iElement = 0;
    } else if (!eqic(string.charAt(iString), element.charAt(iElement)))
      break;
    else {
      ++iElement;
      ++iString;
    }
  }
  ret t3(iList, iElement, iString);
}