The type of elements in the input iterable
The type of keys used for grouping
A function that takes an iterable and yields entries of [key, group of values]
Entries where each entry is a tuple of [key, values] with values being all elements that map to that key
Creates a function that groups elements from an iterable based on keys generated by a mapping function.