[racket-dev] Class contracts: opaque or transparent?

From: Asumu Takikawa (asumu at ccs.neu.edu)
Date: Fri Apr 27 14:51:54 EDT 2012

On 2012-04-27 13:37:02 -0500, Robby Findler wrote:
> I think that maybe I still misunderstand? Specifically, if I put an
> opaque object contract on a value and the contract does not mention
> 'm', then (send ... m) will be a runtime error

The opaque class contract wouldn't produce an error on (send ... m) but
instead when the contract is applied to the class. It's just a first-order
check that makes sure that
  "the set of contracted members" = "the set of class members"

> So, if that's the difference, then what would be the difference of
> making the class/c contracts for the GUI transparent?

If all methods have contracts, there is no difference at all. But
suppose that someone adds a new method and they forget to add a
corresponding contract. Opaque would then raise an error, transparent
would not.

Sorry if I'm being unclear. Let me know if that clears it up.


Posted on the dev mailing list.