I want to write a contract on an exported struct type that insists that
clients who derive subtypes must ensure that the fields of the parent type
are initialized with appropriate values.
The following program does the checking I want, but the blame isn't what I
want or would have expected: it blames the server module, rather than the
client, when the client tries to call the constructor for a subtype with a
bad argument.
#lang racket
(module server racket
(provide (contract-out
[struct base ([num number?])
#:omit-constructor]))
(struct base (num)
#:transparent))
(require 'server)
(struct derived base (sym)
#:transparent)
(derived 42 'ok)
(derived "not a number" 'bad) ;; blames server
Is this the way blame is expected to be assigned in this case? If so, is
there a way for the server to enforce the requirements I have in mind?
-Philip
--
You received this message because you are subscribed to the Google Groups
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.