anchor.diff:  
   [gremlin-groovy,modern]
   ----
  -g.V().group().by(bothE().count())                              <1>
  -g.V().group().by(bothE().count()).by('name')                   <2>
  -g.V().group().by(bothE().count()).by('name').by{it.size()}     <3>
  +g.V().group().by(bothE().count())                                  <1>
  +g.V().group().by(bothE().count()).by('name')                       <2>
  +g.V().group().by(bothE().count()).by('name').by(unfold().count())  <3>
   ----
   
   <1> `by(outE().count())` will group the elements by their edge count (*traversal*).
   <2> `by('name')` will process the grouped elements by their name (*element property projection*).
  -<3> `by{it.size()}` will count the number of elements in each group (*function*).
  +<3> `by(unfold().count())` will count the number of elements in each group (*traversal*).
   
   [[coalesce-step]]
   Coalesce Step
  
positive.code: [gremlin-groovy,modern]
  ----
  g.V().hasLabel('person').
        choose({it.value('name').length() == 5},
          __.in(),
          __.out()).values('name') <1>
  g.V().hasLabel('person').
        choose {it.value('name').length()}.
          option(5, __.in()).
          option(4, __.out()).values('name') <2>
  ----
  
  <1> If the predicate is true, then do `in`, else do `out` (i.e. predicate-based option selection).
  <2> Use the result of the function as a key to the map of traversal options (i.e. function-based option selection).
  
  However, note that `choose()` can have an arbitrary number of options and moreover, can take an anonymous traversal as its choice function.
  
  
negative.code: 
  [gremlin-groovy,modern]
  ----
  g.V().group().by(label()) <1>
  g.V().group().by(label()).by('name') <2>
  g.V().group().by(label()).by('name').by(unfold().count()) <3>
  ----
  
  <1> Group the vertices by their label.
  <2> For each vertex in the group, get their name.
  <3> For each grouping, what is its size?
  
  The three projection parameters available to `group()` via `by()` are:
  
  