I have a contract (define base-grid/c (class/c (given? (->m coord? coord? boolean?)) (get-cell (->m coord? coord? digit?)) (get-cell/given (->m coord? coord? (values digit? boolean?))) (set-cell! (->m coord? coord? digit? void?)) (set-given! (->m coord? coord? digit? void?)) (clear-cell! (->m coord? coord? void?)) (clear-given! (->m coord? coord? void?)) (complete? (->m boolean?)) (creates-duplicate? (->m coord? coord? digit? boolean?))))
for my class base-grid%. As you can probably guess, the main things this class does is enforce the rule that there can be no duplicate digits in a single house (row, column, or 3x3 grid). In practice, it is used in conjunction with pencil-mixin (which adds support for pencil marks) and file-mixin (which allows puzzles to be loaded from or saved to disk). In fact, the only class I instantiate is grid%, defined like this (define grid% (file-mixin (pencil-mixin base-grid%))) Now, here's my question. provide grid% with its own contract-out clause. It seems rather redundant (and presumably unnecessary) to repeat the methods from base-grid% in the contract for grid%. My guess is that if I do not do this base-grid% will be blamed for any contract violations in the base class rather than grid%. Is this correct? Or will it even work? I don't mind if base-grid% is blamed for the contract violation. In fact, it may be preferable because it is more specific. ____________________ Racket Users list: http://lists.racket-lang.org/users