Version: 5.1.1
17 Interface-Oriented Programming for Classes
This library is 
unstable;
compatibility will not be maintained.
See 
Unstable for more information.
Defines name-id as a static interface extending the
interfaces named by the super-ifc-ids and containing the
methods specified by the method-ids.
A static interface name is used by the checked method call variants
(send/i, send*/i, and send/apply/i). When
used as an expression, a static interface name evaluates to an
interface value.
Examples:  | 
| > (define-interface stack<%> () (empty? push pop)) |  | > stack<%> |  #<|interface:stack<%>|>  |   |  
 
  | 
Defines name-id as a static interface with dynamic
counterpart ifc-expr, which must evaluate to an interface
value. The static interface contains the methods named by the
method-ids. A run-time error is raised if any
method-id is not a member of the dynamic interface
ifc-expr.
Use define-interface/dynamic to wrap interfaces from other
sources.
| (send/i obj-exp static-ifc-id method-id arg-expr ...) | 
The argument static-ifc-id must be defined as a static
interface. The method method-id must be a member of the
static interface static-ifc-id; otherwise a compile-time
error is raised.
The value of obj-expr must be an instance of the interface
static-ifc-id; otherwise, a run-time error is raised.
Examples:  | 
| > (define s (new stack%)) |  | > (send/i s stack<%> push 1) |  | > (send/i s stack<%> popp) |  eval:9:0: send/i: method not in static interface in: popp  |  | > (send/i (new object%) stack<%> push 2) |  send/i: interface check failed on: (object)  |  
 
  | 
| (send*/i obj-expr static-ifc-id (method-id arg-expr ...) ...) | 
Checked variant of 
send*.
Example:  | 
| > (send*/i s stack<%> |  |     (push 2) |  |     (pop)) |  
  |  
 
  | 
| (send/apply/i obj-expr static-ifc-id method-id arg-expr ... list-arg-expr) | 
Checks that 
expr evaluates to an instance of
static-ifc-id before binding it to 
id. If
id is subsequently changed (with 
set!), the check is
performed again.
No dynamic object check is performed when calling a method (using
send/i, etc) on a name defined via define/i.
| (init/i (id static-ifc-id maybe-default-expr) ...) |  
  | 
 | 
| (init-private/i (id static-ifc-id maybe-default-expr) ...) |  |   |  | maybe-default-expr |   | = |   | () |  |   |   | | |   | default-expr |  
  |  
  | 
Checked versions of 
init and 
init-field. The value
attached to each 
id is checked against the given interface.
No dynamic object check is performed when calling a method (using
send/i, etc) on a name bound via one of these forms.  Note
that in the case of init-field/i this check omission is
unsound in the presence of mutation from outside the class. This
should be fixed.