Hi Uko,
Groups are essential for Moose. When we have one entity, we have polymorphism and because of that we can nicely map menu items and scripting methods on unary messages. To have the same on groups of objects, we needed to have polymorphism as well.
The magic related to the type inference is more interesting when you interactively choose entities to go in a group. Then, based on the type of the elements, the group type changes at runtime. This dynamic typing logic is documented here:
MooseGroupTest>>testGroupType
Let me know if you have more questions.
Cheers,
Doru
p.s. When trying to understand a class in Pharo, it is always a good idea to check the superclasses :)