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?