code: @Cached
      public Rule trieIgnoreCase(final Collection<String> strings)
      {
          final List<String> list = ImmutableList.copyOf(strings);
  
          final TrieBuilder builder = Trie.newBuilder();
  
          list.forEach(builder::addWord);
  
          return new CaseInsensitiveTrieMatcher(builder.build());
      }
docs: Match one string among many using a <a
  href="http://en.wikipedia.org/wiki/Trie" target="_blank">trie</a>, case
  insensitive version
  
  <p>Duplicate elements will be silently eliminated.</p>
  
  <p>Note that order of elements does not matter, and that this rule will
  always trie (err, try) and match the <em>longest possible sequence</em>.
  That is, if you build a rule with inputs "do" and "double" in this order
  and the input text is "doubles", then "double" will be matched. However,
  if the input text is "doubling" then "do" is matched instead.</p>
  
  <p>Note also that the minimum length of strings in a trie is 1.</p>
  
  @param strings the list of strings for this trie
  @return a rule
  
  @see CaseInsensitiveTrieMatcher