When a variable with a generic function definition appears as the first element of a list that is being evaluated, the Guile evaluator tries to apply the generic function to the arguments obtained by evaluating the remaining elements of the list. [ *fixme* How do I put this in a more Schemely and less Lispy way? ]
Usually a generic function contains several method definitions, with
varying degrees of formal parameter specialization (see define-method). So it is necessary to
sort these methods by specificity with respect to the supplied
arguments, and then apply the most specific method definition. Less
specific methods may be applied subsequently if a method that is being
applied calls next-method.
If a generic function is invoked with a combination of parameters for which there is no applicable method, GOOPS raises an error.