anchor.diff:  }
   ----
   
  -Note that the `StringGrouper.group()` method returns a partially applied function. The `identity`, `f` and `p` parameters have been applied, leaving us with a function from List<String> to List<List<String>>. This makes sense, since we will probably have to process many lists with the same configuration.
  +Note that the `StringGrouper.group()` method returns a partially applied function. The `identity`, `f` and `p` parameters have been applied, leaving us with a function from `List<String>` to `List<List<String>>`. This makes sense, since we will probably have to process many lists with the same configuration.
   
   Now, the client code is awfully simple:
   
  
positive.code: 
    public static void main(String...args) {
  
      StringGrouper grouper = new StringGrouper(10);
  
      List<String> words = Arrays.asList("123", "456", "789", "abc", "def");
  
      grouper.group().apply(words).forEach(System.out::println);
    }
  
negative.code: 
  The first two `group` methods may go into the `Output` class, which for the occasion will be renamed `Grouper`, since it is a generic class used for grouping anything.
  
  The `f` function, the `p` predicate and the third `group()` method will go in a new `String` specific class that will be called `StringGrouper`. Here is the complete generic `Grouper` class:
  
  [source, java]
  ----
  