On Jun 25, 2012, at 11:21 PM, Ryan Culpepper wrote:

> On 06/25/2012 09:04 PM, Asumu Takikawa wrote:
>> On 2012-06-25 20:17:33 -0600, Ryan Culpepper wrote:
>>> IIUC from your later message, you've implemented the generics
>>> analogue of object/c (per-instance contract), whereas
>>> prop:dict/contract is closer to class/c (per-type contract). It's a
>>> little fuzzy because prop:dict/contract hacks in per-instance
>>> contracts too in a kind of ad hoc way.
>> 
>> That's a good point. The better analogy might be interface contracts vs.
>> class/c. With generics, it is easy to control all points that an
>> instance is created since constructors are just procedures. With
>> classes, you can't get away with that since the instantiation forms are
>> macros.
>> 
>> The difference/advantage you might get with a per-type contract for
>> generics is that you get a more interface-like blame story, as with
>> interface contracts. Coverage isn't as much of an issue since you can
>> just contract all constructors.
>> 
>> Unfortunately, it's also not clear how to implement interface-like
>> contracts for generics. Since the generics forms don't control the
>> constructors, it's not obvious how to instantiate the blame at the
>> construction site.
> 
> You don't want to blame the construction site; the relevant party is the 
> implementation site, where the generic interface is associated with concrete 
> methods within a 'struct' form. See the docs for 'struct-type-property/c' for 
> an example.

Well, there are two blame parties, right?

Much like interface contracts mediate between the creator of a class (that 
implements the interface) and the client of that class (that instantiates 
objects from that interface), I would think the contracts for a generic 
interface would be between the creator of a specific instance (the 
implementation site) and the user of that specific instance (the constructor 
site).

Stevie
_________________________
  Racket Developers list:
  http://lists.racket-lang.org/dev

Reply via email to