[racket-dev] Class contracts: opaque or transparent?
On 2012-04-27 13:17:36 -0500, Robby Findler wrote:
> Specifically, it seems like I can add the contract
> (unconstrained-domain-> any) to each method to get it to be opaque
> without actually contributing anything of value.
>
> [...]
>
> Or is there something else going on there that I'm missing?
The primary reason that I added opaque contracts is that they are needed
for Typed Racket's eventual class/object support.
A secondary reason is for enforcing contract coverage. You're right
though: you could get around this by writing a loose contract or by
only specifying the name.[1] The intention is that the contract error
would encourage people to write useful contracts (my mistake for saying
"force"---it doesn't quite do that) rather than just bypass it.
[1]: e.g., (class/c #:opaque m) will allow
(class object% (super-new) (define/public (m) ...))
Cheers,
Asumu