When I read the very good introductory chapter "About GAP" of the GAP manual,
some minor comments/questions came to my mind.
1) The contrary of "Intersection" is in many Categories not the "Union",
but the smallest object (domain), containing the given ones.
Such a function, maybe called "Compositum", would make more sense
2) Why are there no Iterators, generating all elements of a domain
exactly once, but without putting them all into a list.
This is easy to achieve for e.g. permutation groups,
and useful in various places. There could also be a
construct like "for a in D do" where D is a domain, and an
iterator is used to generate the a.
(Similar to "for i in [1..6] do")
3) It seems to me that the definition of "<" in the ResidueClass
example in 1.28 leads to problems if you want to define two
new types of group elements independently and to compare
two of those. The problems arise if you want to put them
into a sorted list (a set).
I must admit that I could implement the proposals 1) and 2) (partially) for
myself, if I really needed them. Maybe the designers of GAP have
thought about these things and have their reasons for not doing them.
But if this is not case they are certainly better in doing a proper
implementation and defining a good standard for these things.