Here's the design I'm going with for make-dictionary:
make-dictionary accepts two arguments, a DTD and a comparator; however, if the dictionary type does not accept a comparator, pass #f. The function dict-comparator will return #f if the various functions are fixed.
make-modified-dtd accepts a DTD and procname-proc pairs; any procnames not mentioned are drawn from the DTD argument. A common use case is replacing the definition of make-dictionary so that other arguments can be passed to the type-specific constructor.
dtd-ref returns a specific procedure from a DTD given its procname. This allows you to pluck individual procedures from a DTD.
Changing procnames to be exported variables with integer values to index into the DTD rather than symbols.
=====
I'm considering adding some additional functions from SRFI 124:
-unfold: as you would think.
dict=?, dict<?, etc. Compare dictionaries for equality, subset, etc. A value comparator is passed in.
dict-union(!), dict-intersection(!), etc. Functional and linear-update versions of these operations.
-range=(!), range<(!), etc. Return subsets whose keys are =, <, etc.
-dict-fold/reverse (maybe)
The following will only work on ordered dictionaries; a new predicate ordered-dictionary? is provided to see if they are applicable or signal dictionary-errors.
-min-key, -max-key: Returns the smallest and largest key in the dictionary.
-key-successor, -key-predecessor: Return preceding and following key.
Comments?