Generic functions provide a form of polymorphism allowing many
implementation methods with varying parameter types, called
specializers. Methods on a given generic function are chosen
according to applicability and are then ordered by specificity.
A method is applicable if each argument is an instance of each
corresponding specializer.
A method A is more specific than method B
if all of A's specializers are subtypes of B's.
During method dispatch three cases can occur:
<gen> | (<fun>) | C |
fun-mets | (x|<gen> => <lst>) | P |
| returns x's methods. | |
gen-add-met | (x|<gen> y|<met> => <gen>) | G |
| adds method y to generic x. | |
ord-app-mets | (x|<gen> args|... => (tup ord|<lst> amb|<lst>)) | G |
| returns both the list of sorted applicable methods and any ambiguous
methods when generic x is called with arguments args. | |
DG | (DG ,name ,sig) | S |
| defines a binding with name ,name bound to a generic with signature ,sig. | |
|